SwiftUİ ve Firebase'de yeniyim ve ilk uygulamamı oluşturmaya çalışıyorum. Oyun belgelerini Firestore'da saklıyorum ve alanlardan biri, resimde gördüğünüz gibi oyuncuların kullanıcı kimliklerini içeren bir dizi.
Olduğu söyleniyor, belirli bir kullanıcının tüm oyunlarını listelemeye çalışıyorum ve hücrelerin her birinde listelenen tüm oyunculara sahibim (sipariş önemlidir).
Kullanıcı arayüzünde oyunların listesini oluşturmak için bir GameCellListView ve bir GameCellViewModel oluşturdum. GameCellViewModel hem oyunları hem de her oyunun oyuncularına karşılık gelen kullanıcı dizisini yüklemelidir. Ancak, kullanıcıları bir diziye yükleyemiyorum. Oyuncular dizisinden geçmeli ve her bir Kimlik için veritabanını sorgulamalı ve bir Kullanıcı dizisine eklemeliyim; o zaman bu Kullanıcı dizisini döndürebilmeliyim. Bir for döngüsü kullandığımdan, değerleri diziye atayamam ve sonra geri döndüremem. Map () kullanmayı denedim, ancak içinde bir sorgu gerçekleştiremiyorum.
Amaç, bu" tüm " var'ı bir oyun ve oyuncularını alan bir yapıyla yüklemektir GamePlayers(players: [User], game: Game)
Aşağıdaki kod parçacığına benzer bir şeye benzemelidir, ancak kullanıcılar dizisi her zaman boş gelir. Bu işlev GameCellViewModel init üzerinde çalışır. Umarım sorunumu anlayabilir ve şimdiden teşekkür ederim! 2 Haftadır buna takılıyorum.
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
}
}
}
}