Swift 2.2 # выбор в ошибке компилятора расширения протокола
У меня есть расширение протокола, которое раньше работало идеально до Swift 2.2.
Теперь у меня есть предупреждение, которое говорит мне, чтобы использовать новый#selector
, но если я добавлю это
с помощью Objective-C Selector не объявлено ни одного метода.
Я попытался воспроизвести проблему в нескольких строках кода, которые можно легко скопировать и вставить на игровую площадку.
protocol Tappable {
func addTapGestureRecognizer()
func tapGestureDetected(gesture:UITapGestureRecognizer)
}
extension Tappable where Self: UIView {
func addTapGestureRecognizer() {
let gesture = UITapGestureRecognizer(target: self, action:#selector(Tappable.tapGestureDetected(_:)))
addGestureRecognizer(gesture)
}
}
class TapView: UIView, Tappable {
func tapGestureDetected(gesture:UITapGestureRecognizer) {
print("Tapped")
}
}
Также есть предложение добавить этот метод в протокол@objc
, но если я это сделаю, он также попросит меня добавить его к классу, который его реализует, но как только я добавлю этот класс, он больше не будет соответствовать протоколу, потому что кажется, что он не видит реализацию в расширении протокола.
Как я могу реализовать это правильно?