[swift] 신속하게 경고를 침묵시키는 방법

많은 경고를 생성하는 코드가 있습니다 (사용되지 않는 API).

clang *을 사용하여 할 수 있습니다.

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    ...
#pragma clang diagnostic pop

그러나 이것은 신속하게 작동하지 않습니다.

신속하게 수행하는 방법?

참고 : 경고를 전역 적으로 또는 파일 전체에서 비활성화하고 싶지 않고 소스 코드의 특정 부분에서 특정 경고를 비활성화하기 만하면됩니다.

편집 : 내 메모가 충분히 명확하지 않은 것 같습니다. 조건부 컴파일을 원하지 않습니다 (추상 된 중복에 대한 제안 된 답변). 새 API를 사용하지 않고 경고를 무음으로 설정하고 싶습니다.



답변

2020 년부터 Xcode 12.0에서는이를 달성 할 방법이 없다는 것이 합의되었습니다.

Apple이 기능을 추가하면이 답변을 업데이트 / 편집하겠습니다.

WWDC 2021 위시리스트에 넣으십시오!


답변

Swift에서 deprecation 경고를 침묵시키는 일반적인 구조는 없지만 많은 경우에 적용 할 수있는 해결 방법이 있습니다 .

사용되지 않는 메서드 / 클래스를 사용 getLatestImage()하는 클래스에 메서드가 있다고 가정 해 보겠습니다 Foo.

메서드 내부@available모든 경고를 침묵시키기 위해 Daniel Thorpe가 설명한대로 사용 합니다.

@available(iOS, deprecated: 9.0)
func getLatestImage() -> UIImage? {
    ...
}

이제 지원 중단 경고없이 메서드 를 호출 하려고 합니다getLatestImage() . 먼저 프로토콜과 확장을 정의하여이를 달성 할 수 있습니다.

private protocol GetLatestImage {
    func getLatestImage() -> UIImage?
}
extension Foo: GetLatestImage {}

그런 다음 사용 중단 경고없이 메서드를 호출합니다 ( foo의 인스턴스 인 경우 Foo).

(foo as GetLatestImage).getLatestImage() // no deprecation warning

그 결과 폐기 경고없이 폐기 된 API를 사용하는 Swift 코드가 있습니다.


답변

실제로 둘러싸는 논리 구조 (예 : 함수 / 유형) 를 사용하여 이러한 경고를 억제 할 수 있습니다@available .

예를 들어 AddressBook 프레임 워크를 사용하는 코드가 있지만 iOS 9에 대해 빌드한다고 가정 해 보겠습니다.

@available(iOS, deprecated: 9.0)
func addressBookStatus() -> ABAuthorizationStatus {
    return ABAddressBookGetAuthorizationStatus()
}

Xcode 7.0.1부터는 인라인 경고가 표시되지 않습니다.


답변

지금은 Swift에서 사용 중단 경고를 무음으로 설정할 방법이 없지만 기술적으로는 헤더 파일을 편집하여 특정 기호에 대해이를 수행 할 수 있습니다.

  • 더 이상 사용되지 않는 기호 이름 복사
  • 선택 File>Open Quickly
  • 기호를 붙여넣고 Enter

    빨리 열기 상자에서 Swift 아이콘이 비활성화되어 있는지 확인하십시오.

  • 선택 File>Show in Finder

  • 필요한 경우 편집 할 수 있도록 파일 권한 변경
  • 기호에 대한 지원 중단 매크로를 편집하십시오. 참조를 위해 주변 API를 참조하십시오. 예 : 교체 :

__OSX_AVAILABLE_BUT_DEPRECATED (__ MAC_10_6, __MAC_10_10, __IPHONE_3_0, __IPHONE_8_0)

__OSX_AVAILABLE_STARTING (__ MAC_10_6, __IPHONE_3_0)

이제 아무것도 할 수없는 덜 산만 한 경고가 하나 있습니다.

알아, 더럽다. 그러나 현재 SDK에서 사용할 수 있는 대체 API없는 경우 안전해야합니다. 새 버전의 Xcode가 나오면 변경 사항을 덮어 쓰고 경고가 다시 표시됩니다. 그런 다음 새 SDK 및 OS를 테스트하여 더 이상 사용되지 않는 API를 계속 사용할 수 있고 대체되지 않았는지 확인할 수 있습니다.

단점이 있으면 의견을 말하십시오.


답변