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:))
我必须调用一个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:))