[備註此問題最初是根據Swift 2.2制定的。它已被修訂爲Swift 4,涉及兩個重要的語言變化:第一個外部方法參數不再被自動抑制,並且選擇器必須明確暴露於Objective-C。]如何解決Swift #selector語法中「模糊使用」編譯錯誤?
比方說,我有這兩種方法我的課:
@objc func test() {}
@objc func test(_ sender:AnyObject?) {}
現在我想用雨燕2.2的新#selector
語法做出相應的這些方法的第一,func test()
選擇。我該怎麼做?當我試試這個:
let selector = #selector(test) // error
...我得到一個錯誤, 「不明確的使用test()
」。但是,如果我這樣說:
let selector = #selector(test(_:)) // ok, but...
...錯誤消失,但我現在指的是錯誤的方法,在一個與的參數。我想參考一個沒有任何參數。我該怎麼做?
[注意:這個例子不是人造的。 NSObject具有Objective-C copy
和copy:
實例方法,Swift copy()
和copy(sender:AnyObject?)
;所以這個問題在現實生活中很容易出現。]
我沒有安裝Xcode beta,但不會'#selector(test())'工作嗎? – Sulthan
嗨@Sulthan,很高興收到你的來信。 - 不,這是解釋函數調用。根本沒有辦法直接提出「沒有參數的概念」的概念。這是一個漏洞;他們似乎已經提前完成了這個任務,並沒有像往常一樣思考... – matt
我剛剛通過郵件討論「使用參數標籤命名函數」。引用是:_Zero參數函數引用仍然需要通過上下文類型信息消除歧義。因此,我認爲你找到了正確的解決方案。我也不喜歡這個語法,我更喜歡'test(Void)'這樣的東西。不幸的是,函數調用和函數描述符之間存在很多語法衝突。 – Sulthan