当前位置: 首页 > news >正文

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 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.

http://www.lryc.cn/news/180855.html

相关文章:

  • RISC-V 指令
  • [NOIP2011 提高组] 选择客栈
  • 桂院校园导航 静态项目 二次开发教程 1.2
  • private static final long serialVersionUID = 1L的作用是什么?
  • leetCode 122.买卖股票的最佳时机 II 贪心算法
  • 阿里云ACP知识点(三)
  • nmap 扫描内网IP, 系统, 端口
  • Llama2-Chinese项目:4-量化模型
  • 【深度学习实验】卷积神经网络(六):自定义卷积神经网络模型(VGG)实现图片多分类任务
  • Git/GitHub/Idea的搭配使用
  • Android的GNSS功能,搜索卫星数量、并获取每颗卫星的信噪比
  • 23-properties文件和xml文件以及dom4j的基本使用操作
  • 新型信息基础设施IP追溯:保护隐私与网络安全的平衡
  • django 实现:闭包表—树状结构
  • Redis与分布式-集群搭建
  • C++--位图和布隆过滤器
  • linux常识
  • Codeforces Round 901 (Div. 1) B. Jellyfish and Math(思维题/bfs)
  • unity 鼠标标记 左键长按生成标记右键长按清除标记,对象转化为子物体
  • 解决mac pro 连接4k显示器严重发烫、卡顿问题
  • QT的ui设计中改变样式表的用法
  • 零基础Linux_10(进程)进程终止(main函数的返回值)+进程等待
  • 【已解决】opencv 交叉编译 ffmpeg选项始终为NO
  • rust生命期
  • 实现将一张图片中的目标图片抠出来
  • Rust 使用Cargo
  • 【k8s】集群搭建篇
  • 10.1select并发服务器以及客户端
  • 几个好用的测试HTTP请求的网站
  • kafka简易搭建(windows环境)