objective-c - respondsToSelector 的 Swift 等价物是什么?

我在谷歌上搜索过,但无法找出与 respondsToSelector: 等效的 swift 是什么。

这是我能找到的唯一东西 (Swift alternative to respondsToSelector:) 但在我的情况下不太相关,因为它检查委托(delegate)的存在,我没有委托(delegate)我只想检查是否有新的 API在设备上运行时是否存在,如果不回退到以前版本的 api。

最佳答案

如前所述,在 Swift 大多数情况下,您可以使用 ? 来实现您所需要的。可选的解包操作符。当且仅当对象存在(不是 nil )并且方法已实现时,这允许您调用对象上的方法。

在你还需要respondsToSelector:的情况下,它仍然是 NSObject 的一部分协议(protocol)。

如果您调用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:") 相同.

https://stackoverflow.com/questions/24167791/

相关文章:

ios - 如何对字符串进行 URL 编码

iphone - @try - Objective-C 中的 catch block

objective-c - 在 Objective-C 中将 NSArray 转换为 NSStrin

objective-c - 在 Objective-C 中转换为绝对值

objective-c - 在 Objective-C 中,Java 的 "instanceof"关

ios - UITableViewCell 显示白色背景,在 iOS7 上无法修改

objective-c - 禁用某些文件的自动引用计数

c - Objective-C : BOOL vs bool

ios - UICollectionView 中的单元格间距

objective-c - Xcode 5 中提供了哪些新的文档命令?