我使用Swift和Objective C的反射尝试调用方法,但该方法接受了参数,我无法解决如何构造Selector
的实例它指的是接受论证的方法。
以下是一些示例代码:
class Thing : NSObject {
func doSomething() {
}
func doSomething(str :String) {
}
}
extension Thing {
func doSomethingElse(str :String) -> String {
}
}
let t = Thing()
var selector = Selector("doSomething")
//selector = Selector("doSomething:")
if t.responds(to: selector) {
t.perform(selector)
}
所以我可以毫无问题地调用doSomething
,但我似乎无法从引用Selector
的字符串创建doSomething(str :String)
。我尝试用字符串" doSomething:" (注释掉的行)。
如果它有任何区别,我最终会尝试调用扩展方法doSomethingElse
。
如何通过反射/选择器调用带有参数的Swift方法?
P.S。我知道一般情况下,你现在应该使用#selector
,但这在我的情况下不起作用,因为编译后的代码中可能不存在方法doSomething
答案 0 :(得分:0)
在Objective C中,带有签名“doSomething(str:String)”的Swift方法称为“doSomethingElseWithStr:”。