Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过自动将方法调用映射到字典中的键来实现Swift协议_Ios_Objective C_Swift - Fatal编程技术网

Ios 通过自动将方法调用映射到字典中的键来实现Swift协议

Ios 通过自动将方法调用映射到字典中的键来实现Swift协议,ios,objective-c,swift,Ios,Objective C,Swift,在Objective C中,我以前能够实现一种自动机制,允许具有私有NSDictionary属性的对象通过自动将方法调用转换为dictionary“valueForKey”请求,并将这些请求传递给具有适当key:value的dictionary来实现一个简单协议 例如,我将有一个对象“ABCArtist”,它将实现artistProtocol。此协议有一个方法-(NSString*)artistName;“ABCArtist”对象将通过返回[self.privateDictionary valu

在Objective C中,我以前能够实现一种自动机制,允许具有私有NSDictionary属性的对象通过自动将方法调用转换为dictionary“valueForKey”请求,并将这些请求传递给具有适当key:value的dictionary来实现一个简单协议

例如,我将有一个对象“ABCArtist”,它将实现artistProtocol。此协议有一个方法-(NSString*)artistName;“ABCArtist”对象将通过返回[self.privateDictionary valueForKey:artistName]来实现此方法

此过程依赖于覆盖NSObject方法:

- (void)forwardInvocation:(NSInvocation *)invocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector;
- (id)forwardingTargetForSelector:(SEL)aSelector;
我曾尝试在Swift中应用相同的过程,但由于出现编译器错误,我无法使用此过程:

“NSInvocation”在Swift:NSInvocation和相关API中不可用 不可用

是否有任何人通过自动查询字典中与协议方法同名的值来实现协议的方法


这种情况的用例是映射到API返回的JSON内容的字典,如果可以实现这种自动映射,我只需要编写协议,并将其转发到生成的JSON字典。

这种在运行时对任意消息的动态处理只能在Objective-C中完成。首先,对纯Swift方法的调用甚至不经过Objective-C动态调度机制。因此,它必须是一个
@objc
方法,并且
前向调用:
逻辑必须在Objective-C中实现。

是的,我得到了相同的结论,但我想我还是问一下,谢谢你的回答!出于好奇,你为什么要这么做?几乎可以肯定,使用字典作为后备存储远比简单地实现属性要复杂得多。