在Swift中将id转换为objective-c定义的协议
我有一个用Objective-C编写的框架。其中一个公共方法返回一个id。 在Objective-C中,我使用强制转换将id值类型转换为协议,以便调用协议中定义的方法。但是当我想在Swift中使用这个框架时,我不知道如何将这个id转换成协议在Swift中将id转换为objective-c定义的协议,objective-c,swift,Objective C,Swift,我有一个用Objective-C编写的框架。其中一个公共方法返回一个id。 在Objective-C中,我使用强制转换将id值类型转换为协议,以便调用协议中定义的方法。但是当我想在Swift中使用这个框架时,我不知道如何将这个id转换成协议 @interface MyManager : NSObject + (id)generateProxyFromXML:(NSString*)xml protocol:(Protocol*)protocol; @end 在Objective-C中,我使用以下
@interface MyManager : NSObject
+ (id)generateProxyFromXML:(NSString*)xml protocol:(Protocol*)protocol;
@end
在Objective-C中,我使用以下代码:
@protocol AProtocol <NSObject>
- (void)doSomething;
@end
id<AProtocol> proxy = [MyManager generateProxyFromXML:@"" protocol:@protocol(AProtocol)];
[proxy doSomething];
如何将此代理传输到协议并调用该方法
let proxy = MyManager.generateProxyFromXML("", protocol: Protocol!(AProtocol)) as! AProtocol
生成“无法强制转换…”运行时错误
更多信息
在XML中,我定义了我的数据库操作。我将XML和协议传递给MyManager以生成DAO代理
在MyManager中,我使用“objc_allocateClassPair”动态创建一个名为“DAOProxy#protocol#u name#”的代理类。然后使用“protocol_copyMethodDescriptionList”查找协议的方法列表。并使用“class_addMethod”将这些方法添加到新类中
最后,我使用类“DAOProxy#protocol#name#”创建一个实例,并以“id”的形式返回。因此,我可以使用此代理实例执行数据库操作。目前我无法测试此操作,但请尝试:
let proxy: protocol<AProtocol> = MyManager.generateProxyFromXML("")
let proxy:protocol=MyManager.generateProxyFromXML(“”)
或
让proxy=MyManager.generateProxyFromXML(“”)作为!协议
它不起作用。我试着用AnyObject替换协议,它还可以。我还可以成功地调用该方法。但对于任何对象,它都不是完美的。
let proxy: protocol<AProtocol> = MyManager.generateProxyFromXML("")
let proxy = MyManager.generateProxyFromXML("") as! protocol<AProtocol>