无法在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”

pdf.js 在 getDocument 上失败

努力在 Firestore Swift 中使用 getDocuments() 进行查询

xpages getDocument().getUniversalID()

MFC 单文档 视图类中CMyDoc* GetDocument() const编译时错误:缺少“;”(在“*”的前面)