从域名到网站,如何给网站添加icon,c站,百度视频免费高清网站在OC的时代里#xff0c;大家捕捉属性的变化通常是通过KVO机制来实现的#xff0c;KVO把所有的属性变化都放在了一个方法进行相应处理#xff0c;并不友好#xff0c;之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了#xff0c;在swift的时… 在OC的时代里大家捕捉属性的变化通常是通过KVO机制来实现的KVO把所有的属性变化都放在了一个方法进行相应处理并不友好之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了在swift的时代里KVO机制已经不能满足我们的需求我这边基于协议写了一套属性变化的监听工具。
使用示例代码
只需要在结构体类遵守协议即可
struct PublishSubjectViewModel:JKChangeCaptureProtocol {var publishObjectMap: [String : RxSwift.PublishSubjectJKPublistMessage]?发送属性变化
var age:Int 0 {didSet {
// postMessage(key: age, value: age) 如果不需要关注oldValue可以不传postMessage(key: age, value: age, oldValue: oldValue)}}var num:Int 0 {didSet {postMessage(key: num, value: num, oldValue: oldValue)}}
处理属性变化 viewModel.observe(key: age) { value inprint(aaa \(value))}.disposed(by: disposeBag)viewModel.observe(key: age, of: Int.self) { value, oldValue inprint(aaa \(value))print(bbb \(oldValue))}.disposed(by: disposeBag)
监听多个属性变化 viewModel.observe(keys: [age,num]) { message inprint(aaa key: \(message?.key), value:\(message?.value), oldValue: \(message?.oldValue))}.disposed(by: disposeBag)
基于RXSwift进行开发 想必很多有接触过RXswift的同学看到disposeBag这个已经猜到了这个工具是基于RxSwift进行开发的主要目的是在捕捉到数据变化的同时能够进行一些装饰性的操作在保证代码优雅的同时增加代码的扩展性。示例如下 viewModel.observe(key: age, of: Int.self) { subject inreturn subject.skip(1)} detailBlock: { value, oldValue inprint(aaa \(value))print(bbb \(oldValue))}.disposed(by: disposeBag)大家可以在第一个block内部对subject执行一些装饰性的操作debouce,throttle,skip,map.等Rxswift支持的操作具体看自己的业务需求。 pod集成
pod JKChangeCapture源码下载地址https://github.com/xindizhiyin2014/JKKVOHelper.