gpt4 book ai didi

objective-c - 在 Swift 中将 id 转换为 objective-c 定义的协议(protocol)

转载 作者:搜寻专家 更新时间:2023-11-01 05:36:31 25 4
gpt4 key购买 nike

我有一个用 Objective-C 编写的框架。其中一个公共(public)方法返回一个 id。在 Objective-C 中,我使用 force-cast 将 id 值类型转换为协议(protocol),以便我可以调用协议(protocol)中定义的方法。但是当我想在 Swift 中使用这个框架时,我不知道如何将这个 id 转换为协议(protocol)。

@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];

但在 Swift 3.0 中,我导入了所有 header :

let proxy = MyManager.generateProxyFromXML("", protocol: Protocol!(AProtocol)) 

如何将此代理传输到协议(protocol)并调用该方法。

let proxy = MyManager.generateProxyFromXML("", protocol: Protocol!(AProtocol)) as! AProtocol

生成“Could not cast ...”运行时错误。

更多信息

在 XML 中,我定义了我的数据库操作。我将 XML 和协议(protocol)传递给 MyManager 以生成 DAO 代理。

在 MyManager 中,我使用“objc_allocateClassPair”动态创建一个名为“DAOProxy_#protocol_name#”的代理类。然后使用“protocol_copyMethodDescriptionList”查找协议(protocol)的方法列表。并使用“class_addMethod”将这些方法添加到新类中。

最后,我使用“DAOProxy_#protocol_name#”类创建实例并返回为“id”。这样我就可以使用这个代理实例来进行数据库操作。

最佳答案

我目前无法测试,但请尝试:

let proxy: protocol<AProtocol> = MyManager.generateProxyFromXML("")

let proxy = MyManager.generateProxyFromXML("") as! protocol<AProtocol>

关于objective-c - 在 Swift 中将 id 转换为 objective-c 定义的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38102258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com