Sunt nou SwiftUI și Firebase și încerc să-mi construiesc primul meu app. Eu sunt stocarea Joc documente în Firestore și unul dintre câmpuri este o matrice care conține id-uri de utilizator de jucători, după cum puteți vedea în imagine.
Acestea fiind spuse, eu sunt încercarea de a lista toate jocurile de un anumit utilizator și toți jucătorii enumerați în fiecare dintre celule (ordinea este importantă).
În scopul de a crea lista de jocuri în UI am creat un GameCellListView și o GameCellViewModel. La GameCellViewModel ar trebui să încarce ambele jocuri și matrice de utilizatori care corespund jucători din fiecare joc. Cu toate acestea nu sunt în măsură să se încarce utilizatorilor să o matrice. Trebuie sa treci prin jucatori matrice și interogare baze de date pentru fiecare Id-ul și pentru a adăuga un Utilizator matrice; apoi m-am ar trebui să fie capabil să se întoarcă acest Utilizator matrice. Din moment ce eu sunt, folosind-o pentru buclă, nu pot atribui valori la matrice și apoi se întoarce. Am încercat, folosind map(), dar nu pot efectua o interogare în interiorul de ea.
Scopul este de a încărca că "toate" var cu o struct care primește un joc și jucătorii săi GamePlayers(players: [User], game: Game)
Acesta ar trebui să arate ceva de genul fragmentul de cod de mai jos, dar utilizatorii matrice vine mereu gol. Această funcție se execută pe GameCellViewModel init. Sper că puteți înțelege problema mea si va multumesc anticipat! A fost blocat pe acest timp de 2 săptămâni
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
}
}
}
}