gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:34 25 4
gpt4 key购买 nike

我想知道是否可以通过 extension 在 Swift 中编辑 properties

我想做这样的事情。

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

最佳答案

您不能更改UIGestureRecognizerstate 属性的实现。如果您可以公开获取和设置 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com