【发布时间】:2016-04-14 18:21:10
【问题描述】:
使用这个 Objective-C 属性:
@interface TSOnboardingPersonalizeViewController
@property (nonatomic, weak) NSObject<PersonalizeContentCoordinatorDelegate> * _Nullable delegate;
@end
在这样的 Swift 扩展中崩溃:
extension TSOnboardingPersonalizeViewController {
func next() {
self.delegate?.performAction(.Forward)
}
}
POing self.delegate 显示:
(lldb) po self.delegate
▿ Optional<protocol<PersonalizeContentCoordinatorDelegate>>
▿ Some : <MyApp.PersonalizeContentCoordinator: 0x8e964cf58140>
但如果我将属性转换为协议类型,它不会崩溃:
extension TSOnboardingPersonalizeViewController {
func next() {
if let delegate = self.delegate as? PersonalizeContentCoordinatorDelegate {
delegate.performAction(.Forward)
}
}
}
POing 代表表演:
(lldb) po delegate
<MyApp.PersonalizeContentCoordinator: 0x7f86bcf59930>
为什么我需要将属性显式转换为 PersonalizeContentCoordinatorDelegate 协议类型?
我正在使用 Swift 2.2 和 Xcode 7.3
【问题讨论】:
标签: objective-c swift