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)
语法为您执行的操作。
在 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)
语法为您执行的操作。