在Swift中,如何测试给定的选择器是否为noop:
选择器?
// Compiler error: Cannot find `noop` in score
override func doCommand(by selector: Selector) {
if selector == #selector(noop(_:)) {
}
}
在AppKit应用程序中处理键盘事件时,将使用Selector
调用NSResponder.doCommand(by:)
。如果键和弦没有映射到已知动作,则选择器noop:
将被返回。
在Objective-C中,您可以使用@selector(noop:)
对此进行测试,但在Swift中,如果您尝试使用#selector(noop(_:))
,则编译器会抱怨无法解析该选择器。当这种情况发生时,您通常只需要在选择器前面加上它所属的类,例如:#selector(NSResponder.moveLeft(_:))
。
但是,我找不到noop:
的定义。再多的头文件搜索也不会发现合适的匹配。
我可以确认,在整个MacOSX.sdk中没有定义noop:
方法的头。
解决方法:您可以使用NSSelectorFromString("noop:")
。
当然,这避免了编译器使用更特殊的#selector(Class.method)
语法为您进行的正确性检查。