我在谷歌上搜索过,但无法找出与 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/