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



在目标C中,我以前能够实现一种自动机制,通过自动将方法调用转换为字典"valueForKey"请求,并将这些请求传递给具有适当键:值的字典,允许具有私有NSDictionary属性的对象实现简单的协议。

例如,我会有一个对象"ABCArtist",它将实现艺术家协议。该协议有一个方法 -(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方法,并且forwardInvocation:逻辑必须在Objective-C中实现。

最新更新