2

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が発生します。

ここでの問題は何ですか?

4

1 に答える 1