【发布时间】:2019-12-19 11:12:01
【问题描述】:
我在我的 iOS 应用程序中使用 Firebase,并创建了一个函数,该函数从 Firestore 数据库返回一个值。问题是变量 val 在 if-else 构造后不会改变。
func getData(collection: String, doc: String, key: String) -> String {
var val = "Simple string"
var db: Firestore!
let settings = FirestoreSettings()
Firestore.firestore().settings = settings
db = Firestore.firestore()
let docRef = db.collection(collection).document(doc)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
val = (document.get(key) as! String)
print(val)
} else {
val = "ERROR"
print("Document does not exist")
}
}
return val
}
这个函数必须返回来自 Firebase 的值(我可以通过 print(val) 看到它)但最后它返回初始值 简单字符串。
我想我应该使用闭包来捕获 if-else 构造中的值,但我不知道该怎么做。
【问题讨论】:
-
此函数必须不返回值,因为
getDocument异步工作。您需要一个完成处理程序。几乎每周都会有人问这个问题。
标签: swift asynchronous