Cloudkit 与组合

Posted

技术标签:

【中文标题】Cloudkit 与组合【英文标题】:Cloudkit with Combine 【发布时间】:2019-12-20 13:33:26 【问题描述】:

我正在使用 SwiftUI 开发一个应用程序,并使用仅针对 ios 13 的 MVVM 架构进行组合。我想在设备之间实现数据同步并使用 CloudKit 框架进行共享。我如何组合 CloudKit 框架以在我的项目中使用?有什么可以对 CloudKit 操作执行以使用 Combine 的吗?

【问题讨论】:

最好使用 SwiftUI 自己的真实来源模式。 MMVM 不兼容。 【参考方案1】:

CloudKit API 很大程度上基于完成回调(根据CloudKit Tips and Tricks),但它没有为任何特定的发布者设置(目前 - 从 iOS 13.3 开始)。因此,您需要自己封装底层 API,创建自己的自定义发布者。

使用 Combine 包装异步调用的最直接方法可能是使用 Future publisher 构建您自己的发布者,也可能使用 Deferred publisher,这取决于您希望它如何反应。这与您可以用来将任何 async-API 变成发布者的 API 结构相同。

在Using Combine 中有一个示例(带有源代码),其中包含wrapping an asynchronous call with a Future to create a one-shot publisher 和creating a repeating publisher by wrapping a delegate based API 部分。

作为一般模式,我的目标是让发布者接收与您想要创建的 UI 体验相关的任何更新。执行此操作的很多过程都涉及选择要封装和包装的内容(错误处理、类型操作以及从基础数据更改中确定要呈现的内容)。

【讨论】:

以上是关于Cloudkit 与组合的主要内容,如果未能解决你的问题,请参考以下文章

将序列与 CloudKit 同步的最佳方法是啥?

CloudKit 查询与 modifyDate 始终返回无结果

CoreData与CloudKit同步时将图像保存到CoreData?

Cloudkit:“提供的 ZoneId 与目标区域不匹配”

CloudKit 用户身份验证与单点登录

Swift 2 和 Cloudkit 的通知