ios - Swift 中带有 Firestore 的完成处理程序的替代方案

标签 ios swift multithreading asynchronous google-cloud-firestore

我正在尝试为我的 iOS 应用实现 3 层架构,并尝试让它与 Firestore 调用配合使用。

因此,在这个应用中,我的 Controller 调用我的服务,服务又调用存储库,然后存储库直接调用 Firebase。代码示例如下所示:

import Firebase

let db = Firestore.firestore()

func repositoryLoad (completion: @escaping ((DocumentSnapshot?, Error?)) -> Void) {
     db.collection("users").document().getDocument { (document, error) in
        completion((document, error))
    }
}

func serviceLoad (completion: @escaping ((DocumentSnapshot?, Error?)) -> Void) {
    repositoryLoad { (document, error) in
        completion((document, error))
    }
}

func controllerLoad (completion: @escaping ((DocumentSnapshot?, Error?)) -> Void) {
    serviceLoad { (document, error) in
        completion((document, error))
    }
}

如您所见,通过层从 firebase 调用信息使得语法相当麻烦,因此凸显了我对更“优雅”解决方案的需求。

因此,我的问题是,如果我在存储库级别调用 Firestore,是否意味着我必须在服务和 Controller 的函数中实现完成处理程序?如果是这样,有什么替代方案吗?我可以使用任何库吗?如果不是,我应该做什么?

顺便说一句,我正在研究 C#/JS 中的 async/await 之类的功能(我理解它是在处理已经评估的异步调用的结果),我发现了像 DispatchGroup 和 DispatchSemaphore 这样的东西,不幸的是它们没有为我工作。从那时起,我发现这些概念涉及多线程,而不是像完成处理程序那样处理异步结果(这正是我想要的)的问题。但是,如果我有任何错误,请纠正我!

我对使用异步代码感到相当困惑,因此非常感谢您的帮助。提前致谢!

最佳答案

RxSwift 是一个 swift 响应式编程框架。这可能是处理异步调用的最佳解决方案。

关于ios - Swift 中带有 Firestore 的完成处理程序的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539692/

相关文章:

ios - Xcode、解析崩溃报告、未创建 dSYM 文件

swift - 如何在 Swift 中使用 Discarding TaskGroup 获取任务结果

c# - WinForms 消息循环没有响应

ios - 如何在 Objective-C 和 Swift 中等待

PHP pthreads 工作很奇怪

java - 为什么新线程立即操作UI时没有CalledFromWrongThreadException?

ios - 从 NSDictionary 获取值

ios - Swift - 为什么 ScrollView 不是全屏?

iphone - linkedin Oauth如何记住登录

ios - Swift iOS NSJsonSerialization 静默失败