Objective-C クラスに Swift ファイルで記述されたプロトコルを採用させようとしています。Swift と Objective-C をある程度相互運用しています。(Swift から Objective-C クラスを構築できます)。
私は持っている:
@objc public protocol FooProtocol {
func foobar()
}
次に、Objective-C ファイル:
#import <UIKit/UIKit.h>
#import "SwiftObjcProtocolTest-Bridging-Header.h"
@protocol FooProtocol
@end
@interface ObjClass1 : NSObject <FooProtocol>
-(void)foobar;
@end
そして実装:
#import "ObjClass1.h"
@implementation ObjClass1
- (void)foobar {
NSLog(@"foobar protocol function called");
}
@end
しかし、Swift (主にアプリ デリゲートでこれを行う) にデリゲート プロパティを指定し、Objective-C オブジェクトをそれに割り当てようとすると、次のようになります。
var delegate: FooProtocol?
....
delegate = objcInstance
delegate?.foobar()
次のように失敗します。
タイプ「ObjClass1」の値をタイプ「FooProtocol?」に割り当てることはできません。
強制しようとしましたas! FooProtocol
が、これによりSIGABRTが発生します。
ここでの問題は何ですか?