如前所述,在
大多数情况下,您可以使用?
可选的unwrapper运算符来实现所需的功能。这样,当且仅当对象存在(不存在
nil)并且实现了该方法时,您才可以在该对象上调用方法。
在您仍然需要的情况下
respondsToSelector:,它仍然是
NSObject协议的一部分。
如果您
respondsToSelector:在Swift 中调用Obj-
C类型,则其工作原理与您期望的相同。如果要在自己的Swift类上使用它,则需要确保您的类从派生
NSObject。
这是一个Swift类的示例,您可以检查它是否响应选择器:
class Worker : NSObject{ func work() { } func eat(food: AnyObject) { } func sleep(hours: Int, minutes: Int) { }}let worker = Worker()let canWork = worker.respondsToSelector(Selector("work")) // truelet canEat = worker.respondsToSelector(Selector("eat:")) // truelet canSleep = worker.respondsToSelector(Selector("sleep:minutes:")) // truelet canQuit = worker.respondsToSelector(Selector("quit")) // false重要的是,不要遗漏参数名称。在此示例中,
Selector("sleep::")与 并不相同
Selector("sleep:minutes:")。


