我想知道是否可以通过 extension
在 Swift 中编辑 properties
?
我想做这样的事情。
extension UIGestureRecognizer {
var state: UIGestureRecognizerState {
didSet(state) {
self.stateChanged(state)
}
}
最佳答案
您不能更改UIGestureRecognizer
的state
属性的实现。如果您可以公开获取和设置 state
,那么您可以创建一个不同的计算属性 myState
,将获取和设置转发给 state
。不幸的是你不能。但是,您可以使用 KVO ( Key Value Observing) 来解决这个问题。
首先,我们创建一个对象来响应我们手势的 KVO 通知并实现 observeValueForKeyPath
,它在 state
属性被调用时被调用。
class StateObserver : NSObject {
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if let gesture = object as? UIGestureRecognizer {
gesture.stateChanged(gesture.state)
}
}
}
其次,注册一个 StateObserver
实例,以便在 tap.state
更改时收到通知。
let stateObserver = StateObserver()
let tap = UITapGestureRecognizer()
tap.addObserver(stateObserver, forKeyPath: "state", options: [.New, .Old], context: nil)
第三,不要忘记在完成后注销 StateObserver
。
tap.removeObserver(stateObserver, forKeyPath: "state'")
关于ios - 属性上的 Swift 扩展事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36315471/