У меня есть расширение протокола, которое оно отлично работало перед быстрым 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
, но если я это сделаю, он также попросит добавить его в класс, который его реализует, но как только я добавлю класс, он не соответствует протокол, поскольку он, похоже, не видит реализации в расширении протокола.
Как я могу реализовать это правильно?