swift - 为什么我的 swift 代码出现故障?
问题描述
我有以下代码,它似乎执行无序。
var theauth = 0
ref = Database.database().reference()
let usersRef = ref?.child("Users")
let queryRef = usersRef?.queryOrdered(byChild: "username").queryEqual(toValue: emailTextField.text!)
queryRef?.observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
let userSnap = snap as! DataSnapshot
let thechild = userSnap.key
print(thechild + "Hi")
if thechild != ""{
theauth = 3
print(thechild + "1")
}else if self.password2.text == self.passwordTextField.text{
theauth = 1
}else{
theauth = 2}
}
})
print(theauth)
输出打印的顺序与我预期的相反:
0 //theauth value
-Lf9xUh53VeL4OLlwqQoHi //thechild value + Hi
-Lf9xUh53VeL4OLlwqQo1 //thechild value + 1
想法???
解决方案
查询是异步的,运行时间比最后的打印语句要长。考虑在设置变量时添加打印语句,或者在查询完成时调用方法来执行该打印语句。
var theauth = 0
ref = Database.database().reference()
let usersRef = ref ? .child("Users")
let queryRef = usersRef ? .queryOrdered(byChild: "username").queryEqual(toValue: emailTextField.text!)
queryRef ? .observeSingleEvent( of: .value, with: {
(snapshot) in
for snap in snapshot.children {
let userSnap = snap as!DataSnapshot
let thechild = userSnap.key
print(thechild + "Hi")
if thechild != "" {
theauth = 3
print(thechild + "1")
} else if self.password2.text == self.passwordTextField.text {
theauth = 1
} else {
theauth = 2
}
}
print(theauth)
})
推荐阅读
- amazon-web-services - 在 AWS API Gateway 中分离环境的推荐方法是什么?
- c# - 为什么我的 Visual Studio Community 2019 在“调试”>“Windows”下没有“模块”选项以及如何修复它?
- google-apps-script - 如何使用 Google Apps 脚本 (GAS) 创建多个驱动器文件夹
- javascript - Chrome调度KeyboardEvent不起作用
- php - 带有代理到 https 链接的 php curl 请求
- playframework - 当我从集群中删除成员时,Infinispan 8.0.1 崩溃
- python-3.x - OpenCV 分类器错误:(-215) !empty() in function detectMultiScale
- java - 静态初始化,main和premain的执行顺序
- html - 尝试在大型显示器上水平对齐项目,并使用引导程序在小型显示器上垂直对齐项目
- javascript - Semantic UI React:同一个组件中多个 useEffect 调用的问题