ios - 为什么我的函数初步返回错误的参数?
问题描述
我目前有一个按钮,按下该按钮可检查函数是否返回 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
}
解决方案
您正在寻找的是一个异步函数,这些函数在继续之前等待特定操作完成,就像 db read 一样,在 db.read 完成后,您可以使用 completionHandler() 来验证结果
以下是有关异步操作的更多信息: https ://developer.apple.com/documentation/foundation/nsoperation#1661231
推荐阅读
- bash - 一种在 gitlab 作业管道中忽略退出状态的方法
- css - 如何将道具传递给反应组件以更改文本颜色
- powerbi - 交互式雷达仪表板 Power BI
- sql - 用 SQL 中同一 SELECT/表/不同列中的值替换 SELECT 结果中的值
- pfx - 如何配置 pfx 证书
- scala - 如何将函数应用于数据框中的每个字符串
- angular - 离子角电容器 - 未找到 FileOpener 活动:未找到处理意图的活动
- android - 检查 VPN 上的 Internet 连接
- javascript - [Vue 警告]:指令中的错误 intersect unbind 挂钩:“TypeError:无法读取未定义的属性‘观察者’”
- docker - 如何调整 Jenkinsfile 中的 ContainerTemplate 以从私有注册表获取图像