Objective-C 的 [noop:] 函数在哪里定义?



在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)语法为您进行的正确性检查。

相关内容

  • 没有找到相关文章

最新更新