使用这种Objective-C的属性调用对象 - 属性:崩溃时,从斯威夫特扩展
@interface TSOnboardingPersonalizeViewController
@property (nonatomic, weak) NSObject<PersonalizeContentCoordinatorDelegate> * _Nullable delegate;
@end
崩溃的斯威夫特扩展这样的:
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协议类型?
我使用雨燕2.2与7.3的Xcode
Swift没有将其视为NSObject,它将其视为>。使用id 也没有帮助。 –
Senior