# DataSynchronized **Repository Path**: psppsp/DataSynchronized ## Basic Information - **Project Name**: DataSynchronized - **Description**: a solution for iOS data synchronization - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DataSynchronized a solution for iOS data synchronization iOS开发本地数据同步的解决方案 ## What for 实现本地数据双向绑定,修改一处数据,其他数据自动同步的功能。主要解决有数据同步需求但采用Notification不易于开发和维护,重新拉取网络数据不方便(比如有分页)且有延时的问题. ## Features * 一行代码调用,数据双向绑定,一处修改,其他绑定数据自动同步 * 内存占用小,绑定耗时短 * 低入侵,不使用hook、+load等方法 * 采用kvo实现,但调用者无需关心内存以及监听的释放 * 内存依赖于绑定的model,model dealloc时自动释放内存和监听移除 * 数据路径加载采用kvc实现,支持多级路径 * 支持同种数据绑定,不同种数据映射绑定 ## How To Use ### Manually * clone并将```DataSync```文件夹拖入项目 ### Pod *TODO . . .* ### Coding * 在需要绑定数据处```import "DataSynchronized.h"``` * ObjC调用 * 同种数据类型 ```objective-c //在获取到数据后进行数据源绑定,如果有多个字段用逗号间隔,支持多级路径 __weak typeof(self)weakSelf = self; [_data addDataSynchronizedKeyPath:@"isFollow,myName,otherModel.otherName" IDPath:@"myID" onChange:^(MyModel * _Nonnull model) { //数据改变回调,在此处执行UI操作 [weakSelf.tableView reloadData]; }]; return _data; ``` * 不同数据类型 ```objective-c /* 把data绑定到MyModel类上 data.otherName与MyModel.myName绑定 将data.othrID作为绑定的改变标识符 */ [_data bindingDataSynchronizedTo:MyModel.class keyPaths:@{@"myName":@"otherName"} IDPath:@"otherID" onChange:^(OtherModel * _Nonnull model) { //数据改变回调,在此处执行UI操作 weakSelf.textField.text = model.otherName; }]; return _data; ``` * Swift调用 * 由于用到kvc和kvo所以在swift上使用稍微麻烦,需要在model每个属性前加上```@objc dynamic``` ```swift class MyModel: NSObject { @objc dynamic var myID : String? @objc dynamic var myName : String? } ``` * 手动引入文件需要桥接,然后正常使用 ```swift array.addDataSynchronizedKeyPath("myName", idPath: "myID") { (model) in let myModel = model as! MyModel print(myModel.myName!,myModel.myID!) } ``` * 详细使用方法请参考demo