【Swift】Objective-C의 프로퍼티를 Swift에서 취급할 때의 주의점
5027 단어 Xcode애플SwiftObjective-C
@property 에서 정의된 속성을 Swift에서 다룰 때 지식 부족으로 조금 실패했기 때문에 조사해 보았습니다.실수 등이 있으면 지적하십시오
실패 내용
nullability annotation 없음) 사용 implicitly unwrapped optional 형식으로 변환 된 속성을 그대로 사용 implicitly unwrapped optional로 변환 된 Objective-C 값이 nil이기 때문에 런타임 오류 결론
nullability annotation 를 제대로 사용하여 Swift에서 호출 할 때 implicitly unwrapped optional를 사용하지 마십시오. nullability annotation를 지정하지 않은 프로퍼티를 Swift에서 사용할 때는 nil 체크를 한다. (조금 기분 나쁘다) nullability annotation을 지정하지 않은 속성을 Swift에서 사용
nullability annotation이란?
nullability annotation 는, Objective-C 의 프로퍼티에 붙여지는 nullable 나 nonnull 와 같은 속성이 됩니다. (자세한 내용은 여기)
nullability annotation이 붙은 프로퍼티를 Swift에서 보면?
Objective-C 코드에서 nullability annotation가 올바르게 사용되는 경우 Swift에서 해당 속성을 사용하면 어떻게 처리됩니까?
어쩐지 상상할 수 있을까 생각합니다만,
nullable 는 Optional에서 wrap 된 형태 nonnull 비 Optional 형 로 Swift에서 처리할 수 있습니다.
[Objective-C]
@property (nullable) id nullableProperty;
@property (nonnull) id nonNullProperty;
[Swift]
var nullableProperty: AnyObject?
var nonNullProperty: AnyObject
nullability annotation 이 붙지 않은 프로퍼티를 Swift에서 보면?
그런 다음
nullability annotation 가 사용되지 않는 속성을 Swift에서 처리할 때 어떻게 될지 살펴보겠습니다.[Objective-C]
@property id unannotatedProperty;
[Swift]
var unannotatedProperty: AnyObject!
nullability annotation 를 사용하지 않으면 ! 가 붙습니다. 이것은 implicitly unwrapped optional 라고 하는 것입니다.implicitly unwrapped optional 의 실체는 Optional 입니다만, 확실히 값이 들어 있다고 전제로 암묵적으로 unwrap 되어 사용됩니다.엔티티는 Optional이므로 nil이 들어 있으면 암시적인 unwrap에서 오류가 발생합니다.
조심하고 싶은 점
여기서 Objective-C에서 변환된
implicitly unwrapped optional 의 프로퍼티의 취급에 주의가 필요합니다.implicitly unwrapped optional 그래서 값이 들어있을 것입니다만, 경우에 따라서는 Objective-C의 코드로 nil이 들어가 있다고 하는 것이 일어날 수 있습니다.그래서, 통상의
implicitly unwrapped optional 보다 조심해 취급하지 않으면 예기치 않은 런타임 에러에 조우할 가능성이 있습니다.결론(재게재)
만약, Objective-C에서 부른 프로퍼티가 implicitly unwrapped optional 가 되어 있으면 이하와 같이 대응하는 것이 좋을 것 같습니다.
nullability annotation 를 제대로 사용하여 Swift에서 호출 할 때 implicitly unwrapped optional를 사용하지 마십시오. nullability annotation를 지정하지 않은 프로퍼티를 Swift에서 사용할 때는 nil 체크를 한다. (조금 기분 나쁘다) 끝에
결론에도 쓴 대로, Objective-C측에서 적절하게 nullability annotation 를 사용하는 것으로 Swift와 제휴했을 때에 안전한 코드를 쓸 수 있을 것 같습니다.
참고
Reference
이 문제에 관하여(【Swift】Objective-C의 프로퍼티를 Swift에서 취급할 때의 주의점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taji-taji/items/8201614409f924d1183a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)