Eu sou novo para SwiftUI e Firebase e eu estou tentando construir o meu primeiro aplicativo. Eu sou o armazenamento de Jogo documentos em Firestore e um dos campos é uma matriz contendo os ids de usuário de jogadores como você pode ver na imagem.
Dito isto, eu estou tentando lista de todos os jogos de um determinado usuário e ter todos os jogadores listados em cada uma das células (a ordem é importante).
Para criar a lista de jogos na INTERFACE do usuário que eu criei um GameCellListView e um GameCellViewModel. O GameCellViewModel deve carregar os jogos e a matriz de usuários que correspondem aos jogadores de cada jogo. No entanto, eu não estou sendo capaz de carregar os usuários para uma matriz. Eu tenho que ir pelos jogadores matriz e consulta o banco de dados para cada Identificação e acrescentar a um Usuário matriz; em seguida, eu deveria ser capaz de retornar a este Usuário matriz. Desde que eu estou usando um loop for, eu não posso atribuir os valores para a matriz e, em seguida, devolvê-lo. Eu tentei usar map(), mas eu não posso executar uma consulta dentro de ti.
O objetivo é a carga de que "todos" var com uma estrutura que recebe de um jogo e de seus jogadores GamePlayers(players: [User], game: Game)
Ele deve parecer algo como o fragmento de código abaixo, mas os usuários matriz sempre vem vazio. Esta função é executada em GameCellViewModel init. Eu espero que você possa entender o meu problema e agradeço antecipadamente! Foi preso a este por 2 semanas de agora
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
}
}
}
}