【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.)