小编典典

respondsToSelector 的 Swift 等价物是什么?

all

我用谷歌搜索但无法找出 swift 等价物respondsToSelector:是什么。


阅读 61

收藏
2022-06-24

共1个答案

小编典典

如前所述,在 Swift 中,大多数时候你可以使用 可选的 unwrapper operator
来实现你所需要的?。当且仅当对象存在(不是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:")

2022-06-24