Я пытаюсь, чтобы класс Objective-C принял протокол, написанный в файле Swift. У меня есть Swift и Objective-C, в некоторой степени взаимодействующие. (Я могу создать свой класс Objective-C из Swift).
У меня есть:
@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.
В чем проблема?