我在谷歌上搜索过,但没能找到swift相当于respondsToSelector:
的数字.
这是我能找到的唯一一件事(Swift alternative to respondsToSelector:),但在我的 case 中并不是太重要,因为它判断委托的存在,我没有委托,我只想判断在设备上运行时是否存在新的API,如果没有,则返回到以前的API版本.
我在谷歌上搜索过,但没能找到swift相当于respondsToSelector:
的数字.
这是我能找到的唯一一件事(Swift alternative to respondsToSelector:),但在我的 case 中并不是太重要,因为它判断委托的存在,我没有委托,我只想判断在设备上运行时是否存在新的API,如果没有,则返回到以前的API版本.
如前所述,在Swift most of the time you can achieve what you need with the 100 optional unwrapper operator中.这允许您在且仅当对象存在(不是nil
)且方法已实现时,对对象调用方法.
如果你仍然需要respondsToSelector:
,它仍然是NSObject
协议的一部分.
如果您在Swift中使用Obj-C类型拨打respondsToSelector:
,则其工作原理与您预期的相同.如果您在自己的Swift类上使用它,您需要确保您的类来自NSObject
.
下面是一个Swift类的示例,您可以判断它是否响应 Select 器:
class Worker : NSObject
{
func work() { }
func eat(food: AnyObject) { }
func sleep(hours: Int, minutes: Int) { }
}
let worker = Worker()
let canWork = worker.respondsToSelector(Selector("work")) // true
let canEat = worker.respondsToSelector(Selector("eat:")) // true
let canSleep = worker.respondsToSelector(Selector("sleep:minutes:")) // true
let canQuit = worker.respondsToSelector(Selector("quit")) // false
重要的是不要遗漏参数名称.在这个例子中,Selector("sleep::")
是not,与Selector("sleep:minutes:")
相同.