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

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

使用示例代码:

只需要在结构体,类,遵守协议即可
复制代码
struct PublishSubjectViewModel:JKChangeCaptureProtocol {
    var publishObjectMap: [String : RxSwift.PublishSubject<JKPublistMessage>]?
发送属性变化:
复制代码
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 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)
监听多个属性变化:
复制代码
        viewModel.observe(keys: ["age","num"]) { message in
            print("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 in
           return subject.skip(1)
        } detailBlock: { value, oldValue in

            print("aaa \(value)")
            print("bbb \(oldValue)")
        }.disposed(by: disposeBag)

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

pod集成

复制代码
pod 'JKChangeCapture'

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

相关推荐
天桥吴彦祖1 天前
判断iOS如何监听手机屏幕是否锁屏
ios
东坡肘子1 天前
SPI 加入 Apple,Swift 迈向自举 -- 肘子的 Swift 周报 #142
人工智能·swiftui·swift
敲代码的鱼2 天前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
时光足迹2 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹2 天前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹2 天前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹2 天前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
编程范式3 天前
SwiftUI 中图片如何适配可用空间
ios
songgeb5 天前
启发式 UI 自动化:从线性剧本到每步读屏决策
ios·测试
东坡肘子8 天前
Swift 还让你 Excited 吗?-- 肘子的 Swift 周报 #141
人工智能·swiftui·swift