最佳答案
这个问题最初是在 Swift 2.2下提出的。它已经为 Swift 4进行了修订,涉及到两个重要的语言变化: 第一个外部方法参数不再被自动抑制,并且选择器必须明确暴露于 Objective-C。]
假设我的类中有这两个方法:
@objc func test() {}
@objc func test(_ sender:AnyObject?) {}
现在我想使用 Swift 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?)
; 因此问题很容易在现实生活中出现。]