respondToSelector / performSelector 参数来自 Swift 中的字符串 3

respondToSelector / performSelector with parameter from a string in Swift 3

我必须调用一个class的方法。此方法可能存在或不存在。 我正在寻找 2 小时的解决方案。 以下作品没有参数 sayHello()

我有 class :

class myClass: NSObject {
    func say(something:String){
        print("I say : \(something)")
    }

    func sayHello(){
        print("Hello")
    }
}

第 1 步:从带有参数

的字符串创建选择器
let selector = NSSelectorFromString("sayHello" ) 
let selectorWithParam = NSSelectorFromString("say:" ) 

第二步:测试方法是否存在

self.bot?.responds(to: selector)// true
self.bot?.responds(to: selectorWithParam) // false        

它不适用于参数!

此外,我尝试使用 Swift3 #selector ,但我发现无法从字符串输入方法

Swift方法

func say(something:String)

映射到 Objective-C 为

- (void)sayWithSomething:(NSString * _Nonnull)something;

因此正确的选择器是

let selectorWithParam = NSSelectorFromString("sayWithSomething:" )

使用#selector更不容易出错:

let selectorWithParam = #selector(myClass.say(something:))