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

Where is Objective-C's [noop:] function defined?

在 Swift 中,如何测试给定的选择器是否为 noop: 选择器?

// Compiler error: Cannot find `noop` in score
override func doCommand(by selector: Selector) {
  if selector == #selector(noop(_:)) {
  }
}

在 AppKit 应用程序中处理键盘事件时,NSResponder.doCommand(by:) 将通过 Selector 调用。如果键和弦未映射到已知动作,则将返回选择器 noop:

在 Objective-C 中,您可以使用 @selector(noop:) 对此进行测试,但是在 Swift 中,如果您尝试使用 #selector(noop(_:)),则编译器会抱怨它无法解析该选择器.发生这种情况时,通常只需在选择器前加上它所属的 class 前缀,例如:#selector(NSResponder.moveLeft(_:)).

但是,我找不到 noop: 的定义位置。在头文件中搜索再多也找不到合适的匹配项。

我可以确认整个 MacOSX.sdk 中没有 headers 定义了 noop: 方法。

Work-around:可以使用NSSelectorFromString("noop:").

当然,这会绕过 correctness-checking 编译器使用更特殊的 #selector(Class.method) 语法为您执行的操作。