我试图让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
和impl:
#import "ObjClass1.h"
@implementation ObjClass1
- (void)foobar {
NSLog(@"foobar protocol function called");
}
@end
但是当我给Swift(主要在app委托中执行此操作)委托属性并尝试将Objective-C对象分配给它时:
var delegate: FooProtocol?
....
delegate = objcInstance
delegate?.foobar()
它失败了:
无法指定类型&#39; ObjClass1&#39;的值输入&#39; FooProtocol?&#39;。
我尝试用as! FooProtocol
强制它,但这导致了SIGABRT。
这里有什么问题?
答案 0 :(得分:0)
为了实现这一目标,我发现:
ObjClass1.m
。您对协议FooProtocol
的前瞻性声明应如下所示:
@protocol FooProtocol;
而不是:
@protocol FooProtocol
@end
注意:虽然这对我有用,但在ObjClass1.h
Cannot find protocol definition for 'FooProtocol'
p
中收到警告时,可能会有更好的解决方案。