我正在尝试为我的 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/