我想从users集合中检索用户名并保存到数组中。我使用的是:
var usernames:[String] = []
override func viewDidLoad() {
super.viewDidLoad(
populateUsernames()
}
func populateUsernames() {
let db = Firestore.firestore()
db.collection("users").getDocuments() { [self] (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
let username = document.get("username") as! String
usernames.append(username)
print(usernames) //THIS PRINTS ["user1", "user2"] WHICH IS CORRECT
}
print(usernames) // THIS PRINTS [] WHICH IS FALSE
}
}
}为什么在for循环之后数组重置为[]?
发布于 2021-05-25 01:35:05
您的代码中没有任何内容会导致此行为。您要么打印了错误的数组,要么是其他东西覆盖了它,这似乎不太可能。我注意到您并没有引用带有self的数组,这是您在这个闭包中需要做的。因此,出于测试目的,请重命名该阵列。
var usernames2: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
populateUsernames()
}
func populateUsernames() {
Firestore.firestore().collection("users").getDocuments { (snapshot, error) in
if let snapshot = snapshot {
for doc in snapshot.documents {
if let username = doc.get("username") as? String {
self.usernames2.append(username)
print(username)
} else {
print("username not found")
}
}
print(self.usernames2)
} else {
if let error = error {
print(error)
}
}
}
}您还可以粗略地解析这些文档,这些文档可能是无害的,但仍然是不安全的,这段代码解决了这些问题。
https://stackoverflow.com/questions/67675367
复制相似问题