responseToSelector / performSelector with Swift 3中字符串的参数

时间:2016-12-07 15:11:56

标签: swift3 selector nsobject performselector respond-to

我必须调用类的方法。此方法可能存在或不存在。 我从2个小时开始寻找解决方案。 以下工作没有参数sayHello()

我有课:

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,但我发现无法从字符串中输入方法

1 个答案:

答案 0 :(得分:1)

Swift方法

func say(something:String)

作为

映射到Objective-C
- (void)sayWithSomething:(NSString * _Nonnull)something;

因此正确的选择器将是

let selectorWithParam = NSSelectorFromString("sayWithSomething:" )

使用#selector不易出错:

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