| 1 min read

Swift 以前是通过 addObserver 来实现对某个属性的变化监听,而最新的变化,书写起开更加方便。

observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in
            print(change)
        }

一定要用属性赋值当前的 observe 结果,没有的话可能会造成 change 不生效。

对 UIScrollView 的滚动监听,我们可以使用 UIScrollViewDelegate

extension UIScrollViewDelegate{
    func scrollViewDidScroll(scrollView: UIScrollView){
        //do something
    }
}

这里推荐使用 Observe 比较方便的是可以进行模块的逻辑的拆分,我们只需在自己的组件里面进行监听

class ComponetView: UIVIew {
	private var observation: NSKeyValueObservation?
	init(targetView: UIView) {
		observation = targetView.observe(\.contentOffset, options: [.new]) { [weak self] scrollView, change in
            // handle data contentOffset
        }
	}
}

最后低版本iOS <= 10.x会有 Crash 问题,由于没有移除 详见 https://oldoldb.com/2019/02/16/KVO-bug/

扩展阅读

You Can Speak "Hi" to Me in Those Ways