Swift选择器:如何使用参数构造实例引用方法?

时间:2016-11-16 13:17:45

标签: swift reflection

我使用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

1 个答案:

答案 0 :(得分:0)

在Objective C中,带有签名“doSomething(str:String)”的Swift方法称为“doSomethingElseWithStr:”。