首页 > 解决方案 > 为什么我的函数初步返回错误的参数?

问题描述

我目前有一个按钮,按下该按钮可检查函数是否返回 true 或 false 参数。有问题的函数检查数据库中的代码,如果存在则返回 true,否则返回 false。但是,该函数默认返回 false,因为数据库需要一秒钟才能返回响应。有什么方法可以让函数在返回对相关 if 语句的响应之前等待响应进入?这样,当按下按钮并运行 if 语句来检查函数结果是真还是假时,它会得到准确的响应吗?封闭的是 if 语句本身,以及函数。

 if ps.getNEWStatus(name: partnerCodeField.text!) == true {
                partnerCode = partnerCodeField.text!
                ps.getStatus()
                
            } else if ps.getNEWStatus(name: partnerCodeField.text!) == false {
                holdText.text = "Partner code is invalid."
                
            }

功能

     func getNEWStatus(name: String) -> Bool {
        
        db.collection("users").document(name)
.addSnapshotListener { documentSnapshot, error in
              guard let document = documentSnapshot else {
              //  print("Error fetching partner status: \(error!)")
                return
              }
              guard let data = document.data() else {
              //  print("No partner with this code exists.")
                isPartnerValid = false
                return
              }
                if let isOnline = data["isOnline"] as? Int {
                    isPartnerValid = true
                    
                }
            }
        
        if isPartnerValid == true {
        return true
        } else if isPartnerValid == false {
            return false
        }
        return false
    }

标签: iosswift

解决方案


您正在寻找的是一个异步函数,这些函数在继续之前等待特定操作完成,就像 db read 一样,在 db.read 完成后,您可以使用 completionHandler() 来验证结果

以下是有关异步操作的更多信息: https ://developer.apple.com/documentation/foundation/nsoperation#1661231


推荐阅读