我想知道是否可以在Swift和properties
中修改extension
?
我想做这样的事情。
extension UIGestureRecognizer {
var state: UIGestureRecognizerState {
didSet(state) {
self.stateChanged(state)
}
}
答案 0 :(得分:1)
您无法更改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'")
。
// ...
base::Model *LoadVirtual(const char *file_name, const Config &config = Config(),
ModelType if_arpa = PROBING);
// ...