目的
最简单的本地数据与远程数据同步的抽象。用于 iOS,用 Swift 编写。
概述
许多应用程序将远程服务器作为某些将后渲染给用户的某些数据源。同步过程用于从远程服务器获取数据并将其存储在本地。此操作包括一些标准阶段:获取、比较、差异、下载新数据等... 此模块通过在内部实现所有逻辑并通过与外部“所谓的”处理器的协议交互来简化同步过程。您需要做的就是实现所有所需异步方法。所有项目都应该具有唯一性并且必须有字符串唯一键。同步器不定义条目的顺序,这是程序员的职责。示例,根据服务器的响应填充顺序,然后根据此顺序对条目进行排序。
安装
Cocoapods
pod "OneWaySynchronizer"
手动
拷贝仓库并将来自 Source
文件夹的文件添加到项目中。
使用方法
请参阅 示例 文件夹以获取详细示例。
OneWaySynchronizer
同步流程
sync()
↓
post OneWaySynchronizerDidChangeSyncStatusNotification
↓
[called at the beginning of synchronization process]
owsSyncBegin
↓
[return list of items from remote source, for example, from server]
owsFetchSourceList
↓ ↓
┌─< err ok
│ ↓
│ [return unique keys of locally existing items]
│ owsGetLocalKeys
│ ↓ ↓
├─< err ok
│ ↓
│ [remove local items, because their keys were not found in source list]
│ owsRemoveLocalItems
│ ↓ ↓
├─< err ok
│ ↓
│ [define if synchronizer should update already existing item]
│ owsShouldUpdateItem
│ ↓ ↓
├─< err ok
│ ↓
│ [here you can reorder, filter items for next download operations]
│ owsPrepareDownload
│ ↓ ↓
├─< err ok
│ ↓
│ [download preview of item if necessary]
│ owsDownloadItemPreview <───────────────────────────┐
│ ↓ ↓ │
├─< err ok >── concurrent loop for all previews ──┘
│ ↓
│ [download main content of item if necessary]
│ owsDownloadItem <─────────────────────────────────┐
│ ↓ ↓ │
├─< err ok >── concurrent loop for all previews ─┘
│ ↓
│ [called after synchronization process]
└> owsSyncEnd
↓
sync completions
↓
post OneWaySynchronizerDidChangeSyncStatusNotification
方法
func sync(completion: @escaping OwsSyncCompletion = { _ in })
开始同步过程。如果有其他进程正在运行,则在该进程完成后将启动新的同步,在最后同步结束时将调用两个完成回调。
func cancel()
取消正在运行的同步。如果没有任何同步正在运行,则不执行任何操作。
选项
concurrency
- 下载时并发任务的数量。0 - 表示自动。默认值是 0。downloadPreview
- 如果为 true,则同步器应调用预下载方法。默认为 false。downloadContent
- 如果为 true,则同步器应调用内容下载方法。默认为 true。stopOnError
- 如果为 true,则同步在进行第一次错误后尽快停止。默认为 true。
更改
参见 变更日志
许可
MIT。参见 LICENSE
作者
Siarhei Ladzeika [email protected]