[备注此问题最初是根据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