[ ПРИМЕЧАНИЕ. Этот вопрос был изначально сформулирован в Swift 2.2. Он был пересмотрен для Swift 4 и включает два важных языковых изменения: первый параметр метода external больше не подавляется автоматически, а селектор должен быть явно представлен Objective-C.]
Допустим, у меня есть два метода в моем классе:
@objc func test() {}
@objc func test(_ sender:AnyObject?) {}
Теперь я хочу использовать новый синтаксис #selector
Swift 2.2, чтобы сделать селектор, соответствующий первому из этих методов, func test()
. Как мне это сделать? Когда я пытаюсь это:
let selector = #selector(test) // error
... Я получаю сообщение об ошибке "Неоднозначное использование test()
". Но если я скажу это:
let selector = #selector(test(_:)) // ok, but...
... ошибка исчезла, но сейчас я имею в виду неправильный метод с параметром. Я хочу сослаться на тот, без каких-либо параметров. Как мне это сделать?
[Примечание: пример не является искусственным. NSObject имеет как Objective-C copy
и copy:
методы экземпляра, Swift copy()
и copy(sender:AnyObject?)
; поэтому проблема может легко возникнуть в реальной жизни.]