在swift中将接口转换为objc协议

时间:2018-01-16 05:33:46

标签: objective-c swift protocols

我有快速代码导入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`

0 个答案:

没有答案