我有一个协议扩展,它曾经在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")
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个建议在协议中附加到该方法@objc,但是如果我这样做也要求我将它添加到实现它的类中,但是一旦我添加该类就不再符合协议,因为它不会好像在协议扩展中看到了实现.
我该如何正确实现?