首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS:基于KVO的轻量级iOS双向数据绑定响应式编程框架

前言:几年前空闲时间玩了Vue.js, 发现利用数据双向绑定,开发如此轻松简洁,我了解iOS也有类似的框架 ReactiveCocoa,  ReactiveCocoa有点复杂和笨重,我只需要简单点的数据绑定,所以写了一个轻量级的数据绑定,麻烦大家看一下,有问题请指点下

1.Demo例子:

一般配合MVVM架构使用,主要用于View和ViewModel双向绑定,也可用于其他数据双向绑定

这里介绍下双向数据绑定好处:

View.textField 跟 ViewModel.text 绑定,用户在输入框textField输入"Hello World",text也会响应式更新,此时text = @"Hello World", 我们只要对text进行处理

如果我们从网络获取Model,Model 转换并赋值于 ViewModel.text,View也会响应式更新界面, 整个过程都是对ViewModel.text进行操作,不会再去处理View部分

github地址: https://github.com/shidavid/DVDataBind

其他例子:利用 DVDataBind 双向绑定 + MVVM 简单实现登录界面

2.介绍:

不限定只能 View 与 ViewModel 绑定,只要支持KVC的数据都能双向绑定

使用链式编程,支持多项绑定

支持单向数据流/双向数据流

支持 字符串,整形,浮点型,布尔类型 之间数据自动转换 (对象类型除外)

支持过滤, 限制,转换, 观察数组某一位数据变化

无需继承基类,无需手动解绑, 当目标对象内存释放,DataBind自动解绑和释放内存

3.思路

A 与 B 双向数据绑定,Ain数据变化更新Aout、Bout数据,Bin同理

有时候 A 与 B 双向绑定,B 与 C 双向绑定, 其实相当于 A、B、C 一起绑定在一条数据链Chain上, 每当有一个in数据变化, 发送新数据到Chain上,再由Chain更新所有的out数据

这样实现单向/双向数据流

利用KVO, 数据链就相当于Obverse,每个Observer用一个ChainCode标记,Observer观察每个in数据变化,并更新到所有Out数据

4.用法

DVDataBind 必须用 _in 或 _inout 开头, 后面绑定顺序先后随意, 任意组合, 不影响结果

_in 只发送新数据,_inout 可接受和发送新数据,_out 只接受新数据

目标对象必须支持KVC

目标对象不能为nil, property可为nil

Swift也能使用, 只不过更新数据不能直接 object.property = xxx , 需要 object.setValue(xxx, forKey: "property")

1. 普通绑定

2. UI 绑定

3.转换

支持 字符串,整形,浮点型,布尔类型 之间数据自动转换 (对象类型除外)

4.数组

5.取反

6.输出Block

支持绑定多个输出Block, 更新数据不支持自动转换

7.过滤,限制

一个数据链只能绑定一个过滤, 更新数据不支持自动转换

在这里可以对数据进行判断,限制,校验等等操作

8.中途增加绑定

9.解绑

已经支持 当对象内存释放自动解绑, 无需手动解绑, 如果想手动解绑可用以下API

5.如何导入项目

编译DVDataBindKitShell

生成Framework拖入项目

项目 Target -> Build Settings -> Linking ->Other Linker Flags 添加参数:  -all_load  -ObjC

在PCH文件导入

6.结语:

github地址: https://github.com/shidavid/DVDataBind

谢谢大家观看,有兴趣麻烦点个星星关注下

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200903A026GL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券