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.
相关文章:
JKChangeCapture swift 版本的捕捉属性变化的工具
在OC的时代里,大家捕捉属性的变化通常是通过KVO机制来实现的,KVO把所有的属性变化都放在了一个方法进行相应处理,并不友好,之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了,在swift的时…...
RISC-V 指令
RISC-V指令都是32位长。 文章目录 R-Type指令格式:I-Type指令格式:S-Type指令格式:B-Type指令格式:U-Type指令格式:UJ-Type指令格式:J-Type指令格式:R4-Type指令格式:F-Type指令格式:vC-Type指令格式:CB-Type指令格式:CIW-Type指令格式:CL-Type指令格式:R-Type指…...
[NOIP2011 提高组] 选择客栈
[NOIP2011 提高组] 选择客栈 题目描述 丽江河边有 n n n 家很有特色的客栈,客栈按照其位置顺序从 1 1 1 到 n n n 编号。每家客栈都按照某一种色调进行装饰(总共 k k k 种,用整数 0 ∼ k − 1 0 \sim k-1 0∼k−1 表示)&am…...
桂院校园导航 静态项目 二次开发教程 1.2
Gitee代码仓库:桂院校园导航小程序 GitHub代码仓库:GLU-Campus-Guide 先 假装 大伙都成功安装了静态项目,并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了,有提到 我…...
private static final long serialVersionUID = 1L的作用是什么?
1.作用是什么? 当一个类被序列化后,存储在文件或通过网络传输时,这些序列化数据会包含该类的结构信息。当反序列化操作发生时,Java虚拟机会根据序列化数据中的结构信息来还原对象。 但是,如果在序列化之后,…...
leetCode 122.买卖股票的最佳时机 II 贪心算法
122. 买卖股票的最佳时机 II - 力扣(LeetCode) 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&…...
阿里云ACP知识点(三)
1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力,而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性,例如______,帮助您高效、灵活地自定义ECS实例配置,满足业务需求。 标签、密钥对、 实例RAM…...
nmap 扫描内网IP, 系统, 端口
nmap 扫描内网IP, 系统, 端口 扫描内网ip 对内网进行ARP扫描 .\nmap.exe -sn 192.168.110.0/24 # 全网段 .\nmap.exe -sn 192.168.110.100-200 # 100-200范围 扫描端口 .\nmap.exe -sT 192.168.110.130 # 三次握手连接 较慢, 但更有效 .\nmap.exe -sS 192.168.110.130 # 发…...
Llama2-Chinese项目:4-量化模型
一.量化模型调用方式 下面是一个调用FlagAlpha/Llama2-Chinese-13b-Chat[1]的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit[2]的例子: from transformers import AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model AutoGPTQForCausalLM…...
【深度学习实验】卷积神经网络(六):自定义卷积神经网络模型(VGG)实现图片多分类任务
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集(CIFAR10Dataset) a. read_csv_labels() b. CIFAR10Dataset 2. 构建模型(FeedForward&…...
Git/GitHub/Idea的搭配使用
目录 1. Git 下载安装1.1. 下载安装1.2. 配置 GitHub 秘钥 2. Idea 配置 Git3. Idea 配置 GitHub3.1. 获取 GitHub Token3.2. Idea 根据 Token 登录 GitHub3.3. Idea 提交代码到远程仓库3.3.1. 配置本地仓库3.3.2. GitHub 创建远程仓库1. 创建单层目录2. 创建多层目录3. 删除目…...
Android的GNSS功能,搜索卫星数量、并获取每颗卫星的信噪比
一、信噪比概念 信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。 信噪比越大,此颗卫星越有效(也就是说可以定位)。也就是说࿰…...
23-properties文件和xml文件以及dom4j的基本使用操作
特殊文件 我们利用这些特殊文件来存放我们 java 中的数据信息,当数据量比较大的时候,我们可以利用这个文件对数据进行快速的赋值 对于多个用户数据的存储的时候我们要用这个XML来进行存储 关于这些特殊文件,我们主要学什么 了解他们的特点&…...
新型信息基础设施IP追溯:保护隐私与网络安全的平衡
随着信息技术的飞速发展,新型信息基础设施在全球范围内日益普及,互联网已经成为我们社会和经济生活中不可或缺的一部分。然而,随着网络使用的增加,隐私和网络安全问题也引发了广泛关注。在这个背景下,IP(In…...
django 实现:闭包表—树状结构
闭包表—树状结构数据的数据库表设计 闭包表模型 闭包表(Closure Table)是一种通过空间换时间的模型,它是用一个专门的关系表(其实这也是我们推荐的归一化方式)来记录树上节点之间的层级关系以及距离。 场景 我们 …...
Redis与分布式-集群搭建
接上文 Redis与分布式-哨兵模式 1. 集群搭建 搭建简单的redis集群,创建6个配置,开启集群模式,将之前配置过的redis删除,重新复制6份 针对主节点redis 1,redis 2,redis 3都是以上修改内容,只是…...
C++--位图和布隆过滤器
1.什么是位图 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。比如int 有32位,就可以存放0到31这32个数字在不在某个文件中。当然,其他类型也可以。 2.位…...
linux常识
目录 i.mx6ull开发板配置ip 静态IP配置 命令行配置 配置文件配置 动态IP配置 命令行配置 配置文件配置 为什么编译驱动程序之前要先编译内核? init系统服务 systemv守护进程 systemd守护进程 i.mx6ull开发板配置ip i.mx6ull有两个网卡(eth0和…...
Codeforces Round 901 (Div. 1) B. Jellyfish and Math(思维题/bfs)
题目 t(t<1e5)组样例,每次给出a,b,c,d,m(0<a,b,c,d,m<2的30次方) 初始时,(x,y)(a,b),每次操作,你可以执行以下四种操作之一 ①xx&y,&为与 ②xx|y,|为或 ③yx^y,^为异或 …...
unity 鼠标标记 左键长按生成标记右键长按清除标记,对象转化为子物体
linerender的标记参考 unity linerenderer在Game窗口中任意画线_游戏内编辑linerender-CSDN博客 让生成的标记转化为ARMarks游戏对象的子物体 LineMark.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineMark : MonoBeh…...
蒙特卡洛方法赋能智能体决策:原理、实现与工程实践
1. 项目概述:一个为智能体注入“蒙特卡洛”思想的工具箱最近在探索智能体(Agent)开发时,我一直在思考一个问题:如何让智能体的决策过程不那么“一根筋”?我们常见的基于规则或简单LLM调用的智能体ÿ…...
从服务器到手机:手把手教你修改游戏客户端IP,让私服在手机上跑起来
移动游戏私服客户端IP修改实战指南 当你在服务器上成功部署了游戏私服后,最令人沮丧的莫过于发现手机上的官方客户端无法连接到你的私人服务器。这个看似简单的"最后一公里"问题,往往成为许多私服搭建者的拦路虎。本文将彻底解决这个痛点&…...
Vulkan学习笔记
顺序很重要:#define 必须在 #include <GLFW/glfw3.h> 之前出现,否则不起作用。作用:当 GLFW 的头文件看到这个宏被定义后,它就会知道你需要 Vulkan 支持,并自动执行 #include <vulkan/vulkan.h>࿰…...
35岁程序员的AI转型之路:年薪翻倍,收藏这份从零到架构师的详细指南
本文分享了作者作为35岁Java程序员的AI转型经历,从初期的焦虑与迷茫,到通过学习ChatGPT、Prompt Engineering和大模型技术,最终成功转型为AI架构师的故事。文章详细描述了学习路径、关键决策、遇到的坑以及成功因素,并给其他程序员…...
SAP ABAP开发必看:FOR ALL ENTRIES性能翻倍的隐藏参数rsdb/max_blocking_factor实战调优
SAP ABAP性能调优实战:FOR ALL ENTRIES参数优化全解析 当你在ABAP开发中处理百万级数据时,是否遇到过这样的场景:明明使用了FOR ALL ENTRIES语句,程序却像蜗牛一样缓慢?这背后隐藏着一个关键参数——rsdb/max_blocking…...
Encaustic不是滤镜!揭秘热蜡媒介物理特性如何反向重构MJ提示词结构:材料科学×AIGC的跨学科实践
更多请点击: https://intelliparadigm.com 第一章:Encaustic不是滤镜!——热蜡媒介的本质祛魅 Encaustic(热蜡绘画)常被误认为是数字图像处理中的一种“复古滤镜”,实则是一种拥有两千多年历史的实体绘画媒…...
实战:用Python的scipy和numpy搞定分数阶灰色模型(FGM),附完整代码和避坑指南
实战:用Python的scipy和numpy搞定分数阶灰色模型(FGM),附完整代码和避坑指南 灰色预测模型在数据分析领域一直占有一席之地,特别是当面对小样本、贫信息的数据预测问题时。传统灰色模型通过一阶累加生成指数规律明显的…...
Windows 11终极优化指南:一键清理系统臃肿,免费提升51%性能
Windows 11终极优化指南:一键清理系统臃肿,免费提升51%性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to …...
如何快速掌握MRIcroGL:医学影像三维可视化的完整指南
如何快速掌握MRIcroGL:医学影像三维可视化的完整指南 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL MRIcroGL是一款功能强…...
给MT7628路由器插上4G翅膀:OpenWRT下EC20模块保姆级配置与避坑指南
让老旧路由器重获新生:MT7628EC20打造高性价比4G物联网网关 在物联网和边缘计算快速发展的今天,稳定可靠的网络连接成为各类智能设备的基础需求。然而传统有线宽带在移动监控、车载设备、临时部署等场景中往往难以满足需求。本文将详细介绍如何利用MT762…...
