我有一个协议扩展,它过去在swift 2.2之前可以完美地工作。
现在我有一个警告,告诉我使用新的#selector,但是如果我添加它
#selector
没有使用Objective-C选择器声明任何方法。
我尝试通过以下几行代码重现该问题,可以轻松将其复制并粘贴到操场上
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,但是如果我这样做,它还会要求我将其添加到实现该方法的类中,但是一旦添加,该类便不再符合该协议,因为它不符合该协议似乎看不到协议扩展中的实现。 如何正确实施?
@objc
我有一个类似的问题。这是我所做的。
@objc public protocol UpdatableUserInterfaceType { optional func startUpdateUITimer() optional var updateInterval: NSTimeInterval { get } func updateUI(notif: NSTimer) } public extension UpdatableUserInterfaceType where Self: ViewController { var updateUITimer: NSTimer { return NSTimer.scheduledTimerWithTimeInterval(updateInterval, target: self, selector: #selector(Self.updateUI(_:)), userInfo: nil, repeats: true) } func startUpdateUITimer() { print(updateUITimer) } var updateInterval: NSTimeInterval { return 60.0 } }