相关疑难解决方法(0)

协议扩展编译器错误中的Swift 2.2 #selector

我有一个协议扩展,它曾经在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,但是如果我这样做也要求我将它添加到实现它的类中,但是一旦我添加该类就不再符合协议,因为它不会好像在协议扩展中看到了实现.
我该如何正确实现?

protocols ios swift

25
推荐指数
3
解决办法
8892
查看次数

标签 统计

ios ×1

protocols ×1

swift ×1