をOBJの-Cのプロパティを呼び出す:このようなスウィフト延長でクラッシュこの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プロトコルタイプにプロパティをキャストする必要がありますか?
私はそれがデリゲートは、おそらくperformAction
メソッドを持っていないNSObjectの、であるという事実に起因することができると思いスウィフト2.2とXcode 7.3
SwiftはNSObjectと見なさず、<プロトコル>と見なします。 id を使用してもどちらも役に立ちません。 –
Senior