ios - Cloudkit 与结合

标签 ios swift swiftui cloudkit combine

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

最佳答案

CloudKit API 很大程度上基于完成回调(根据 CloudKit Tips and Tricks ),但尚未为任何特定发布者设置(当前 - 从 iOS 13.3 开始)。所以你想要的任何东西,你都需要自己包装底层 API,创建你自己的自定义发布者。

使用Combine 包装异步调用的最直接方法可能是使用Future 构建您自己的发布者。出版商,可能还有 Deferred发布者,取决于您希望它如何 react 。这与您可能用于将任何 async-API 制作成发布者的 API 结构相同。

Using Combine 中有一个这样做的例子(带有来源)同款wrapping an asynchronous call with a Future to create a one-shot publishercreating a repeating publisher by wrapping a delegate based API .

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

关于ios - Cloudkit 与结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59426092/

相关文章:

ios - UILocalNotification 根本不起作用

ios - 有没有一种方法可以检查 2 个 NSDictionaries 是否包含相同的键?

swift - 是否可以将输入的文本保存到 SwiftUI 的警报文本字段中,并像这样在应用程序中显示它 -> Text ("alert text input here")?

ios - 获取点击手势的展开值

javascript - 如何在 iOS 上仅将 javascript 函数定位到 safari < 6.0

ios - Swift 无法通过委托(delegate)调用协议(protocol)方法

ios - 如何在 WKWebView 中自动播放 youtube 视频?

ios - Swift:使用 GCDAsyncUdpSocket 接收 UDP

ios - 是否有将数字转换为十六进制字符串的快速 native 函数?

ios - 通过 UIViewRepresentable 在 SwiftUI 中调整 UILabel 的大小,如 Text 以包裹多行