Swift에서는 드물지만 nil 값을 갖는 non-optional 유형의 값으로 끝나는 것이 가능합니다.Swift에서 nil에 대해 선택 사항이 아닌 값을 확인하는 가장 좋은 방법
- (NSObject * _Nonnull)someObject {
return nil;
}
또는 나쁜 스위프트 코드 :
class C {}
let x: C? = nil
let y: C = unsafeBitCast(x, to: C.self)
실제로, 나는이로 실행했습니다 this question에 대한 답변에서 설명하고있는 바와 같이,이 스위프트에 다리를 나쁜 목적-C 코드에 의해 발생 될 수있다 MFMailComposeViewController
API는 MessageUI
입니다. 다음은 비 선택적 MFMailComposeViewController
을 만들지 만 사용자가 메일에 이메일 계정을 설정하지 않은 경우, 다음 코드는 EXC_BAD_ACCESS
와 충돌 :
let mailComposeViewController = MFMailComposeViewController()
print("\(mailComposeViewController)")
디버거 같은 mailComposeViewController
의 값을 보여줍니다
unsafeBitCast(_:to:)
에 대한
documentation이 "를 말한다 있습니다
- :
mailComposeViewController = (MFMailComposeViewController) 0x0000000000000000
여기 몇 가지 질문을 스위프트 타입 시스템의 보장을 깨뜨리는 것 "이라고 말하면서 Swift 문서에는 이러한 보장이 깨지거나, 언제/언제 어떻게 될 수 있는지 설명되어 있습니다.
- 이 케이스를 확인하는 가장 좋은, 가장 관용적 인 방법은 무엇입니까? 컴파일러는 옵션이 아니기 때문에
mailComposeViewController == nil
여부를 확인하지 않을 것입니다.
메일 작성자를위한 분명한 해결책은 전자 메일을 보낼 수 있는지 먼저 확인하는 것입니다. – rmaddy