Arrays 在闭包中追加到数组
我从firebase数据库中提取userUID数据并将其放入数组中。当我在observe闭包外部打印数组时,它不会打印,但在闭包内部会打印。这里发生了什么事Arrays 在闭包中追加到数组,arrays,swift,firebase,firebase-realtime-database,Arrays,Swift,Firebase,Firebase Realtime Database,我从firebase数据库中提取userUID数据并将其放入数组中。当我在observe闭包外部打印数组时,它不会打印,但在闭包内部会打印。这里发生了什么事 let databaseRef = Database.database().reference() var userUIDArray = [String]() override func viewDidLoad() { super.viewDidLoad() databaseRef.child("Users").obse
let databaseRef = Database.database().reference()
var userUIDArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
databaseRef.child("Users").observe(.value, with: { (snapshot) in
let snapshots = snapshot.children.allObjects as! [DataSnapshot]
for child in snapshots {
self.userUIDArray.append(child.key)
}
})
print(self.userUIDArray)
}
闭包中的代码是异步执行的(在发出网络请求之后),这意味着它在
viewDidLoad
中的其余代码之后执行
下面是代码执行时间的快速排序:
override func viewDidLoad() {
// #1
databaseRef.child("Users").observe(.value, with: { (snapshot) in
// #3
})
// #2
}
闭包外部的print
语句不打印任何内容,因为调用数组时数组中没有元素。闭包中的print
语句起作用,因为数组在调用之前已被修改
以下是从Firebase返回数据时如何使用该数据的示例:
let databaseRef = Database.database().reference()
var userUIDArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
databaseRef.child("Users").observe(.value, with: { (snapshot) in
let snapshots = snapshot.children.allObjects as! [DataSnapshot]
for child in snapshots {
self.userUIDArray.append(child.key)
}
updateUserInterface()
})
}
func updateUserInterface() {
// update the UI here using the `userUIDArray` variable
myTableView.reloadData()
}
闭包中的代码是异步执行的(在发出网络请求之后),这意味着它在
viewDidLoad
中的其余代码之后执行
下面是代码执行时间的快速排序:
override func viewDidLoad() {
// #1
databaseRef.child("Users").observe(.value, with: { (snapshot) in
// #3
})
// #2
}
闭包外部的print
语句不打印任何内容,因为调用数组时数组中没有元素。闭包中的print
语句起作用,因为数组在调用之前已被修改
以下是从Firebase返回数据时如何使用该数据的示例:
let databaseRef = Database.database().reference()
var userUIDArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
databaseRef.child("Users").observe(.value, with: { (snapshot) in
let snapshots = snapshot.children.allObjects as! [DataSnapshot]
for child in snapshots {
self.userUIDArray.append(child.key)
}
updateUserInterface()
})
}
func updateUserInterface() {
// update the UI here using the `userUIDArray` variable
myTableView.reloadData()
}
闭包正在异步运行。您的最终打印是在闭包有机会将值附加到数组之前进行的。闭包正在异步运行。您的最终打印是在闭包有机会将值附加到您的数组之前进行的。如何将它们附加到我的数组中?您正在正确地将它们附加到数组中。如果要使用数据(例如更新UI),可以从闭包(标记为#3)内部调用函数,而不是在viewDidLoad(标记为#2)中调用函数。您介意向我展示一下这是什么样子吗。我试过了,但一定是做错了。是的,我还是弄不懂。我真的不知道该在函数中添加什么来更新tableview。您应该能够在table view上调用
reloadData
。我该如何将它们追加到数组中?您正确地将它们追加到了数组中。如果要使用数据(例如更新UI),可以从闭包(标记为#3)内部调用函数,而不是在viewDidLoad(标记为#2)中调用函数。您介意向我展示一下这是什么样子吗。我试过了,但一定是做错了。是的,我还是弄不懂。我真的不知道该在函数中添加什么来更新tableview。您应该能够在tableview上调用reloadData
。