• JKChangeCapture swift 版本的捕捉属性变化的工具


      在OC的时代里,大家捕捉属性的变化通常是通过KVO机制来实现的,KVO把所有的属性变化都放在了一个方法进行相应处理,并不友好,之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了,在swift的时代里,KVO机制已经不能满足我们的需求,我这边基于协议写了一套属性变化的监听工具。

    使用示例代码:

    只需要在结构体,类,遵守协议即可
    struct PublishSubjectViewModel:JKChangeCaptureProtocol {
        var publishObjectMap: [String : RxSwift.PublishSubject]?
    
    • 1
    • 2
    发送属性变化:
    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)
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    处理属性变化:
      viewModel.observe(key: "age") { value in
                print("aaa \(value)")
            }.disposed(by: disposeBag)
    
       viewModel.observe(key: "age", of: Int.self) { value, oldValue in
                print("aaa \(value)")
                print("bbb \(oldValue)")
            }.disposed(by: disposeBag)
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    监听多个属性变化:
            viewModel.observe(keys: ["age","num"]) { message in
                print("aaa key: \(message?.key), value:\(message?.value), oldValue: \(message?.oldValue)")
            }.disposed(by: disposeBag)
    
    
    • 1
    • 2
    • 3
    • 4
    基于RXSwift进行开发

      想必很多有接触过RXswift的同学看到disposeBag这个已经猜到了,这个工具是基于RxSwift进行开发的,主要目的是在捕捉到数据变化的同时能够进行一些装饰性的操作,在保证代码优雅的同时增加代码的扩展性。示例如下:

            viewModel.observe(key: "age", of: Int.self) { subject in
               return subject.skip(1)
            } detailBlock: { value, oldValue in
    
                print("aaa \(value)")
                print("bbb \(oldValue)")
            }.disposed(by: disposeBag)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    大家可以在第一个block内部,对subject执行一些装饰性的操作,debouce,throttle,skip,map.等Rxswift支持的操作,具体看自己的业务需求。
    pod集成

    pod 'JKChangeCapture'
    
    • 1

    源码下载地址:https://github.com/xindizhiyin2014/JKKVOHelper.

  • 相关阅读:
    C++ Reference: Standard C++ Library reference: C Library: cstdio: fputs
    RCNA 锐捷培训
    基于java+ssm+shiro的出租房管理平台
    Nodejs错误处理详细指南
    HOC示例
    【cmake】利用cmake的add_subdirectory管理内部和外部库
    HTTPS如何保证数据传输的安全性 以及CA签发证书&验签
    SpringBoot拉取高德天气预报数据
    操作系统内存换出---15
    微前端:qiankun的依赖import-html-entry的作用
  • 原文地址:https://blog.csdn.net/HHL110120/article/details/133324633