我有快速代码导入objc标头。在头文件中定义了一个objc协议
@protocol MyProtocol
- (void) foo();
@end
objc方法返回接口类型为Proxy的对象。
@interface Proxy
+ (Proxy*) create:(Protocol*)arg;
@end
create
返回的对象实现了协议arg
。当我在objc代码中使用API时,我可以确认这是有效的,因为我可以将MyProtocol
中定义的方法发送到返回的对象。如
[[Proxy create:protocol(MyProtocol)] foo];
然而,在swift中,当我尝试将create
结果转换为MyProtocol
对象时,我收到了强制转换异常。
var obj = Proxy.create(MyProtocol.self)
var my = obj as! MyProtocol
// error is Could not cast value of type 'Proxy' to 'MyProtocol'
我甚至可以通过使用此代码看到obj
具有协议类型MyProtocol
。
extension Protocol {
var myName: String {
return NSStringFromProtocol(self)
}
}
print(obj.myName)
// prints Optional("MyProtocol")
我还尝试了一种解决方法,首先将obj
投放到AnyObject
,但这没有帮助。
`obj as AnyObject as! MyProtocol`