【发布时间】:2020-09-06 20:01:13
【问题描述】:
我有一个我想从 swift 调用的 objc 方法,但该方法存在于第三方框架中,在运行时可能存在也可能不存在。 我想做的是动态调用它,所以我正在研究使用选择器与之交互。
方法签名在 ObjC 中是这样的
- (NSString * _Nullable)buildData:(NSError * _Nullable __autoreleasing * _Nullable)error;
删除可以为空的注释,这是 ObjC 永远拥有的沼泽标准“返回事物或错误”模式。
- (NSString*)buildData:(NSError*)error;
如果 swift 可以在编译时加载它,那么它会很高兴地转换为
func buildData() throws -> String
但是,我想动态调用它。我已经知道我可以做到这一点:
let _target:NSObject = // obtain a reference to the underlying value
var error: NSError? = nil
_target.perform(NSSelectorFromString("buildData:"), with: &error)
问题是,我无法传递对执行选择器方法的引用。 XCode 给了我一个编译错误
'&' 与 'Any?' 类型的非 inout 参数一起使用
所以我的问题是,如何使用选择器调用此方法?
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/a/33391876/1187415.
-
从 Objective-C 向 Swift 导入可选的“抛出”方法似乎存在一个普遍问题:bugs.swift.org/browse/SR-11676。
标签: objective-c swift selector