Je suis nouveau sur SwiftUI et Firebase et je suis en train de créer ma première application. Je suis le stockage de Jeu de documents dans Firestore et l'un des champs est un tableau contenant les identifiants des joueurs comme vous pouvez le voir dans l'image.
Cela étant dit, je suis en train de la liste de tous les jeux d'un utilisateur donné et disposent de tous les joueurs inscrits dans chacune des cellules (l'ordre est important).
Afin de créer la liste des jeux dans l'INTERFACE utilisateur, j'ai créé un GameCellListView et un GameCellViewModel. Le GameCellViewModel doit se charger à la fois les jeux et le tableau des utilisateurs qui correspondent aux joueurs de chaque jeu. Cependant, je ne suis pas être en mesure de charger les utilisateurs à un tableau. Je dois passer par les joueurs de la matrice de requête et de la base de données pour chaque Id et l'ajouter à un Utilisateur de tableau; alors je devrais être en mesure de retourner cette matrice Utilisateur. Depuis que je suis en utilisant une boucle for, je ne peux pas assigner les valeurs dans le tableau, puis le retourner. J'ai essayé avec la fonction map(), mais je ne peux pas effectuer une requête à l'intérieur d'elle.
Le but est de charger que "toutes les" le var avec une structure qui reçoit un jeu et de ses joueurs GamePlayers(players: [User], game: Game)
Il devrait ressembler à l'extrait de code ci-dessous, mais les utilisateurs de tableau vient toujours vide. Cette fonction s'exécute sur GameCellViewModel init. J'espère que vous pouvez comprendre mon problème et je vous remercie à l'avance! Été coincé sur ce pour 2 semaines maintenant
func loadData() {
let userId = Auth.auth().currentUser?.uid
db.collection("games")
.order(by: "createdTime")
.whereField("userId", isEqualTo: userId)
.addSnapshotListener { (querySnapshot, error) in
if let querySnapshot = querySnapshot {
self.games = querySnapshot.documents.compactMap { document in
do {
let extractedGame = try document.data(as: Game.self)
var user = [User]()
let users = extractedGame!.players.map { playerId -> [User] in
self.db.collection("users")
.whereField("uid", isEqualTo: playerId)
.addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
user = documents.compactMap { queryDocumentSnapshot -> User? in
return try? queryDocumentSnapshot.data(as: User.self)
}
}
return user
}
self.all.append(GamePlayers(players: users.first ?? [User](), game: extractedGame!))
return extractedGame
}
catch {
print(error)
}
return nil
}
}
}
}