Swift Firebase查询不是';如果我不能按我想要的顺序开火,我怎么才能解决这个问题?
在我的iOS应用程序中,我试图从Google Firebase中提取字符串来填充数组friends,然后在该数组上迭代以使用标记填充friendsMarkers。我的问题是fetchFriendsMarkers中的for循环永远不会执行,因为friends[]返回一个空数组。这是一个同步问题吗?如果是这样,在执行fetchFriendsMarkers()之前,如何确保friends不为空Swift Firebase查询不是';如果我不能按我想要的顺序开火,我怎么才能解决这个问题?,swift,xcode,firebase,Swift,Xcode,Firebase,在我的iOS应用程序中,我试图从Google Firebase中提取字符串来填充数组friends,然后在该数组上迭代以使用标记填充friendsMarkers。我的问题是fetchFriendsMarkers中的for循环永远不会执行,因为friends[]返回一个空数组。这是一个同步问题吗?如果是这样,在执行fetchFriendsMarkers()之前,如何确保friends不为空 var ref: DatabaseReference? var friends: [Stri
var ref: DatabaseReference?
var friends: [String] = []
var friendsMarkers: [Marker] = []
private func viewDidLoad(){
ref = Database.database().reference()
fetchFriends()
fetchFriendsMarkers()
}
private func fetchFriends(){
let query = ref?.child("users").child((currentUser?.uid)!).child("Friends")
query?.observe(.childAdded, with: { (snapshot) in
let friend = snapshot.value as? NSDictionary
let id = friend!["id"] as! String
self.friends.append(id)
})
query?.observe(.childRemoved, with: { (snapshot) in
let friend = snapshot.value as? NSDictionary
let id = friend!["id"] as! String
var index: Int
for i in self.friends{
if i == id{
index = self.friends.index(of: i)!
self.friends.remove(at: index)
}
}
})
}
private func fetchFriendsMarkers(){
for friend in self.friends {
let query1 = ref?.child("user-locations").child(friend)
query1?.observe(.childAdded, with: { (snapshot) in
})
query1?.observe(.childChanged, with: { (snapshot) in
})
query1?.observe(.childRemoved, with: { (snapshot) in
})
}
}
这些都是异步调用,这就是为什么没有调用其他函数的原因。收到数据时,需要在fetchFriends函数中调用fetchFriends标记,并建议进行以下修改:
private func fetchFriends(){
let query = ref?.child("users").child((currentUser?.uid)!).child("Friends")
query?.observe(.childAdded, with: { (snapshot) in
let friend = snapshot.value as? NSDictionary
let id = friend!["id"] as! String
self.friends.append(id)
// call fetchFriendMarkers when you receive the friend data
self.fetchFriendsMarkers(id)
})
query?.observe(.childRemoved, with: { (snapshot) in
let friend = snapshot.value as? NSDictionary
let id = friend!["id"] as! String
var index: Int
for i in self.friends{
if i == id{
index = self.friends.index(of: i)!
self.friends.remove(at: index)
}
}
})
}
private func fetchFriendsMarkers(friend: String){
let query1 = ref?.child("user-locations").child(friend)
query1?.observe(.childAdded, with: { (snapshot) in
})
query1?.observe(.childChanged, with: { (snapshot) in
})
query1?.observe(.childRemoved, with: { (snapshot) in
})
}
...
fetchFriends()
别担心。如果我的答案对你有帮助,请投票并将其标记为已接受答案。谢谢