source

Swift 4 모드에서 Swift 3 @objc 추론 사용은 권장되지 않습니다.

itover 2023. 4. 17. 21:45
반응형

Swift 4 모드에서 Swift 3 @objc 추론 사용은 권장되지 않습니다.

Xcode 9 베타 사용 중 다음 경고가 발생했습니다.

Swift 4 모드에서 Swift 3 @objc 추론 사용은 권장되지 않습니다.권장되지 않는 @objc 추론 경고에 대처하고 "Use of required Swift 3 @objc inference" 로깅을 활성화하여 코드를 테스트하고 Swift 3 @objc 추론을 비활성화하십시오.**

조사를 좀 해봤지만, 나는 아직도 그 문제를 어떻게 해결해야 할지 모르겠다.이 문제를 해결하기 위한 힌트나 상황을 설명해 주시면 감사하겠습니다.

제 목표는 제 코드에서 무슨 일이 일어나고 있는지 더 잘 이해하는 것입니다.

이 경고는 타깃의 "Swift 3 @objc 추론" 빌드 설정을 "기본값"으로 변경하여 제거했습니다.

Xcode9에서 Swift 3 @objc 추론 비활성화

기사부터:

Swift 4 이전에 컴파일러는 일부 Swift 선언을 Objective-C에 자동으로 제공했습니다.예를 들어, NSObject에서 서브클래스를 받은 경우 컴파일러는 이러한 클래스의 모든 메서드에 대해 Objective-C 엔트리 포인트를 만들었습니다.이 메커니즘은 @objc 추론이라고 불립니다.

Swift 4에서는 이러한 모든 Objective-C 진입점을 생성하는 데 비용이 많이 들기 때문에 이러한 자동 @objc 추론은 더 이상 사용되지 않습니다."Swift 3 @objc 추론" 설정이 "On"으로 설정되면 이전 코드가 작동할 수 있습니다.단, 대처해야 할 권장 해제 경고가 표시됩니다.이러한 경고를 "수정"하고 설정을 새 Swift 프로젝트의 기본값인 "기본값"으로 전환하는 것이 좋습니다.

자세한 내용은 이 Swift 제안서도 참고하시기 바랍니다.

뭐? - 뭐?@objc? 무슨 ★★★★★★★★★★★★★★★★?

»Swift 3합니다.@objc, '다', '다', '다', '다'를 붙입니다.@objc★★★★★★★★★★★★★★★★!

»Swift 4컴파일러는 더 이상 이 작업을 수행하지 않습니다., 이렇게 하다를 넣어야 .@objc명쾌하게

기본적으로는 Swift 4 이전 프로젝트가 있는 경우 이에 대한 경고가 표시됩니다.Swift 4 swift swift swift swift swift swift swift swift swift swift swift swift swift swift swift 。은 「 」로 됩니다.SWIFT_SWIFT3_OBJC_INFERENCE 4 에서는 Swift 4로 설정됩니다.On새로운 프로젝트의 디폴트옵션인 (또는 )로 설정하는 것을 추천합니다.

모든 것을 변환하는 데 시간이 걸리지만 Swift 4의 디폴트이기 때문에 그럴 가치가 있습니다.

- 컴파일러 경고/오류를 중지하는 방법

컴파일러가 불평하지 않도록 코드를 변환하는 방법은 두 가지가 있습니다.

는 '사용하다'입니다.@objcObjective-C는 다음과 같습니다.

@objc func foo() {

}

또 하나는 '먹다'를 요.@objcMembers Class 자동으로 추가.@objc클래스 내의 모든 함수 및 변수.이것은 간단한 방법이지만, 예를 들어 노출될 필요가 없는 기능을 노출시킴으로써 애플리케이션의 크기를 늘릴 수 있습니다.

@objcMembers class Test {

}

뭐? - 뭐?@objc리고고 왜것 ?? ????

하면 Swift 클래스로 .@objc는 오브젝티브-C 런타임에 이들을 공개합니다.클래스를 하는 Objective-C Objective-C와 같은 Objective-C 합니다.Selectors 타겟 패턴: 타겟 액션이다.button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)

왜다 안 해? - 다 표시 안 해?@objc

하다, 라고 할 때 인 것들이 .@objc:

  • 응용 프로그램 바이너리 크기 증가
  • 함수 오버로드 없음

이것은 매우 높은 수준의 요약이며, 제가 쓴 것보다 더 복잡하다는 점을 유의하시기 바랍니다.자세한 내용은 실제 제안서를 읽어보실 것을 권장합니다.

출처:

Migrator가 @objc Inferred Objective-C thunks를 찾는 데 도움이 되지 않는 으로 표시해야 하는 모든 기능을 식별할 수 없음
되지 않는 방법에 대한 • 권장되지 않는 방법에 대한 경고 작성
되지 않는 실행 시 • "thunk"

여기에 이미지 설명 입력

이 경고는 "Swift 3 @objc 추론" = "기본값" 설정으로 표시되었습니다.그 후, 그것은 타겟이 아닌 프로젝트용으로 설정되어 있는 것을 깨달았습니다.따라서 경고를 제거하려면 대상에 "기본값" 설정이 있는지 확인하십시오.

단순히 "ON"이 아닌 "default"로 넘어갈 수 있습니다.애플 논리에 더 충실한 것 같아요.

(단, 다른 모든 코멘트에서는@obj유효합니다.)

실제로 Swift 3 @objc Inference를 비활성화하면 이러한 경고를 제거할 수 있습니다.그러나 미묘한 문제가 발생할 수 있습니다.예를 들어 KVO가 동작을 정지합니다.이 코드는 Swift 3에서 완벽하게 동작했습니다.

for (key, value) in jsonDict {
    if self.value(forKey: key) != nil {
        self.setValue(value, forKey: key)
    }
}

Swift 4로 이행하여 "Swift 3 @objc 추론"을 기본값으로 설정한 후 프로젝트의 일부 기능이 작동하지 않게 되었습니다.이에 대한 해결책을 찾기 위해 몇 가지 디버깅과 연구가 필요했습니다.제가 아는 바로는 다음과 같은 옵션이 있습니다.

  • "Swift 3 @objc 추론"을 활성화합니다(Swift 3에서 기존 프로젝트를 마이그레이션한 경우에만 작동합니다).
  • 영향을 받는 메서드와 속성을 @objc로 표시합니다.
  • @objcMembers를 사용하여 전체 클래스에 대해 ObjC 추론을 다시 활성화합니다.

@objc 추론을 다시 활성화하면 경고가 표시되지만 이것이 가장 빠른 해결책입니다.이전 Swift 버전에서 마이그레이션된 프로젝트에서만 사용할 수 있습니다.다른 두 가지 옵션은 더 지루하고 코드 디깅과 광범위한 테스트가 필요합니다.

https://github.com/apple/swift-evolution/blob/master/proposals/0160-objc-inference.md 도 참조해 주세요.

저는 가끔 iOS 개발(곧 더 늘어날 예정)이지만, 다른 답변의 안내에 따라 설정을 찾을 수 없었습니다(응답에 표시된 키 체인 항목이 없었기 때문에). 이제 이 스냅샷에 클릭해서 찾을 필요가 있는 강조 표시된 위치를 추가할 수 있을 것 같습니다.

  1. 왼쪽 위부터 시작
  2. 프로젝트 폴더 선택 아이콘
  3. 프로젝트 폴더 아이콘 아래에서 기본 프로젝트 이름을 선택합니다.
  4. 우측의 [빌드 설정(Build Settings 。
  5. Targets 아래에서 프로젝트를 선택합니다.
  6. 아래로 스크롤(또는 검색 텍스트 상자에서 단어 추론 검색)

설정 찾기

"Pod update" 및/또는 "flutter clean"을 시도할 수 있습니다.

이 설정도 xcode로 설정했습니다.

Objective-C 인터페이스 설정은 다음과 같습니다.

ObjectiveC 인터페이스 설정

Swift 3 @objc 추론 Swift 4 모드에서 Swift 3 @objc 추론을 사용하는 것은 권장되지 않습니다.사용되지 않는 @objc 추론 경고에 대처하고 "Use of recommended Swift 3 @objc inference" 로깅을 활성화하여 코드를 테스트한 다음 "XMLParsingURL" 대상의 "Swift 3 @objc Inference" 빌드 설정을 "Default"로 변경하여 추론을 비활성화하십시오.

에 도달하다

  1. 첫 번째 단계는 빌드 설정을 취득했습니다.

  2. 검색하여 빌드 설정 추론

  3. swift 3 @objc 추론 기본값 변경

여기에 이미지 설명 입력

Swift 4 모드에서 Swift 3 @objc 추론 사용은 권장되지 않습니다.

func call @objc 사용

func call(){

foo()

}

@objc func foo() {

}

완료될 때까지 테스트 대기만 실행하면 됩니다. 그런 다음 빌드 설정, 검색에서 빌드 설정 추론으로 이동하여 swift 3 @objc Inference를 (기본값)으로 변경합니다.그게 내가 완벽하게 하고 일했던 전부야

@말한 것 에 @wisekiddo에서 .project.pbxproj3 @ Inference를 Swift 3 @obj Inference와 같이 합니다.SWIFT_SWIFT3_OBJC_INFERENCE = Default; 플레이버release Xcode 이외의 온 에는 Xcode를 사용합니다.

언급URL : https://stackoverflow.com/questions/44379348/the-use-of-swift-3-objc-inference-in-swift-4-mode-is-deprecated

반응형