Sono nuovo di SwiftUI e Firebase e sto cercando di costruire la mia prima app. Io sono la memorizzazione di Gioco di documenti in Firestore e uno dei campi è un array che contiene l'id utente dei giocatori, come si può vedere nell'immagine.
Detto questo, sto cercando di elencare tutti i giochi di un determinato utente e di tutti i giocatori elencati in ognuna delle cellule (l'ordine è importante).
Per creare la lista dei giochi in UI ho creato un GameCellListView e un GameCellViewModel. Il GameCellViewModel dovrebbe caricare entrambi i giochi e la matrice di utenti che corrispondono ai giocatori per ogni gioco. Tuttavia, non sono in grado di caricare le utenti di un array. Devo passare attraverso il giocatori array e interrogare il database per ogni Id e aggiungere a un Utente array, quindi dovrei essere in grado di restituire questo Utente array. Dal momento che sto usando un ciclo for, non posso assegnare i valori dell'array e poi tornare. Ho provato con la funzione map(), ma non è possibile eseguire una query all'interno di esso.
L'obiettivo è quello di caricare che "tutti" var con una struttura che riceve un gioco e i suoi giocatori GamePlayers(players: [User], game: Game)
Dovrebbe essere qualcosa come il frammento di codice qui di seguito, ma gli utenti array viene sempre vuoto. Questa funzione viene eseguita su GameCellViewModel init. Spero tu possa capire il mio problema e vi ringrazio in anticipo! Stato bloccato su questo per 2 settimane
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
}
}
}
}