无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]
Posted
技术标签:
【中文标题】无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]【英文标题】:Can't assign variable to Firebase Data within getDocuments querysnapshot (Swift) [duplicate] 【发布时间】:2021-09-05 21:15:28 【问题描述】:我正在尝试根据这里的代码将变量设置为布尔值:
Firestore.firestore().collection("users").whereField("username", isEqualTo: usernameTextField.text!).getDocuments
(querySnapshot, error) in
if let error = error print(error.localizedDescription) /*ALERT*/
else
if querySnapshot!.isEmpty
print("QuerySnapshot is empty, this is unique")
retVal = true
else
print("There's a bloody username in here, get a new one")
retVal = false
return retVal
但问题是,retVal 没有改变。我了解这里发生了什么,它是一个异步代码块,但是我不明白如何修复它或解决它以满足我的需要。尽管它是异步的,但我如何获得 retVal 的值(或者老实说只是在这段代码中返回 true 或 false)。在进一步执行代码之前,我是否可以等待它完成?
【问题讨论】:
查找“完成处理程序”和“回调函数” 【参考方案1】:由于您的调用是异步的,您应该在函数中使用回调或完成处理程序,这样当 Firestore 查询完成时将返回 retVal。
类似这样的:
func userIsUnique(completionHandler: (Bool) -> Void)
Firestore.firestore().collection("users").whereField("username", isEqualTo: usernameTextField.text!).getDocuments
(querySnapshot, error) in
if let error = error print(error.localizedDescription) /*ALERT*/
else
if querySnapshot!.isEmpty
print("QuerySnapshot is empty, this is unique")
completionHandler(true)
else
print("There's a bloody username in here, get a new one")
completionHandler(false)
【讨论】:
它不起作用,我已经尝试过完成处理程序。 var retVal = falseisUnique (bool) in retVal = bool print("THIS IS THE RET VALUE: " + String(retVal)) if retVal == false return retVal
(抱歉,我不知道如何修复它的烦人空间)以上是关于无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Swift 和 Cloud Firestore 事务 - getDocuments?
没有为“CollectionReference”类型定义方法“getDocuments”
努力在 Firestore Swift 中使用 getDocuments() 进行查询