我创建了一个自定义类,该类为 Swift 5 ,用于处理云Firestore数据库的写入/读取过程。
“ get()”方法接收集合,文档ID和要检索的参数的名称。
应该返回数据(如果找到)
但是我发现它返回“ nil”,原因是“ getDocuments()”函数尚未完成运行,但是由于没有错误,该函数返回了“ nil”值。 / strong>
我试图将函数分成两个串行队列,但由于无法从队列中返回值而无法正常工作。
我试图运行一个无限循环,该循环不断检查“ getDocuments()”函数是否已完成,如果已经完成,它将返回该值。
import UIKit
import Foundation
import Firebase
class CloudFirestoreHandler {
internal let db: Firestore?
internal enum FIRESTORE_ERRORS: Error {
case errorAddingDocument
case errorUpdatingDocument
case errorGettingDocument
case internetNotAvailable
}
init() {
db = Firestore.firestore()
}
func get(collection: String, documentID: String, forKey: String) throws -> Any? {
var error: Bool = false
var returnValue: Any?
db!.collection(collection).getDocuments() { (querySnapshot, err) in
if err != nil {
self.handleErrors()
error = true
} else {
// GET USER NAME
for document in querySnapshot!.documents {
if document.documentID == documentID {
returnValue = document.data()[forKey]
break
}
}
}
}
if !error {
// returns nil because "error" is "false"
// but "returnValue" does not have a value yet
// It should only return when the process above has finished
return returnValue
} else {
throw FIRESTORE_ERRORS.errorGettingDocument
}
}
}
我发现“ getDocuments()”函数是异步的。 这意味着我必须检测它何时完成,但是我无法想到任何方法。