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

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

问题描述:

在Objective Objective中,以前能够实现自动机制以允许具有私有NSDictionary属性的对象通过自动将方法调用转换为字典来实现简单协议'valueForKey'请求,并将这些请求传递给具有相应键值的字典。通过自动将方法调用映射到字典中的键来实现Swift协议

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

这个过程依赖于重写NSObject的方法:

- (void)forwardInvocation:(NSInvocation *)invocation; 
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector; 
- (id)forwardingTargetForSelector:(SEL)aSelector; 

我曾尝试采用同样的过程,斯威夫特,但是我不能,因为我得到了编译器错误使用此:

'NSInvocation' is unavailable in Swift: NSInvocation and related APIs not available

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

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

+0

出于好奇,你为什么要这样做?使用字典作为后备存储几乎可以肯定比简单地实现属性要多得多。 –

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

+0

是的,我得到了同样的结论,但是我想我也许会问,谢谢你的回复! – Mike