在 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(_:))則編譯器會抱怨它無法決議該選擇器。發生這種情況時,您通常只需要在選擇器前面加上它所屬的類,例如: #selector(NSResponder.moveLeft(_:))。
但是,我找不到noop:定義的位置。沒有多少搜索頭檔案顯示合適的匹配。
uj5u.com熱心網友回復:
我可以確認整個 MacOSX.sdk 中沒有定義noop:方法的標頭。
解決方法:您可以使用NSSelectorFromString("noop:").
當然,這繞過了編譯器使用更特殊的#selector(Class.method)語法為您進行的正確性檢查。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365195.html
