Swift等效于reactsToSelector是什么?

发布于 2021-01-31 23:56:58

我已经用谷歌搜索,但无法找出什么是等效respondsToSelector:的。

这是我唯一能找到的(Swift的替代方法responsesToSelector:),但在我的情况下并没有太大意义,因为它检查了委托的存在,我没有委托,我只想检查是否存在新的API在设备上运行时是否返回,如果不是,则返回原先的api版本。

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    如前所述,在
    大多数情况下,您可以使用?可选的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"))   // 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::")并不
    相同Selector("sleep:minutes:")



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看