1

我必须调用一个类的方法。这种方法可能存在或不存在。我正在寻找 2 小时后的解决方案。以下作品不带参数sayHello()

我有课:

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

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

第一步:从带有参数的字符串创建选择器

let selector = NSSelectorFromString("sayHello" ) 
let selectorWithParam = NSSelectorFromString("say:" ) 

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

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

它不适用于参数!

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

4

1 回答 1

1

斯威夫特方法

func say(something:String)

映射到 Objective-C 为

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

因此正确的选择器是

let selectorWithParam = NSSelectorFromString("sayWithSomething:" )

使用#selector不易出错:

let selectorWithParam = #selector(myClass.say(something:))
于 2016-12-07T15:26:23.400 回答