属性上的Swift扩展事件监听器

时间:2016-03-30 17:14:12

标签: ios swift properties uikit

我想知道是否可以在Swift和properties中修改extension

我想做这样的事情。

extension UIGestureRecognizer {
    var state: UIGestureRecognizerState {
       didSet(state) {
             self.stateChanged(state)
       }
}

1 个答案:

答案 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);
// ...