3
如何使用Swift #selector语法解决“模棱两可”的编译错误?
[注意此问题最初是在Swift 2.2下提出的。它已针对Swift 4进行了修订,涉及两个重要的语言更改:第一个方法参数external不再被自动抑制,并且选择器必须显式地暴露给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-Ccopy和copy:实例方法Swiftcopy()和copy(sender:AnyObject?); 因此这个问题很容易在现实生活中出现。]