나는 새로운 SwiftUI 및 중포 기지를 구축 내 첫 번째 응용 프로그램입니다. 나는 저장하는 게임에서 문서를 Firestore 고 필드 중 하나는 배열을 포함하는 사용자의 id 당신의 이미지를 볼 수 있습니다.
그는 말했다,내가 하려고 목록은 모든 게임의 주어진 사용자는 모든 플레이어에 나열된 각각의 세포(순서가 중요합니다).
을 만들기 위해 게임의 목록 UI 에서 내가 만들어 GameCellListView 및 GameCellViewModel. 이 GameCellViewModel 로드 두 게임 배열의 사용자가 해당하는 플레이어 각각의 게임이다. 그러나 나는 로드할 수 없는 사용자를 배열입니다. 이를 통해 선수들이 배열 및 쿼리 데이터베이스에 대한 각각의 Id 및 추가 사용자에게 배열음으로 돌아갈 수 있는 이용자의 배열입니다. 이후 나는 루프를 사용하여 내가 할당할 수 없습 값을 배열 및 반환합니다. 나는 시도를 사용하여 지도(),수는 없지만 쿼리를 수행됩니다.
의 목표는 로드하는"모든"var 와 함께하는 구조체를 받게임 플레이어 GamePlayers(players: [User], game: Game)
다음과 같은 표시되어야 합니다 아래 코드 조각,그러나 사용자 배열이 항상 비어 있습니다. 이 기능을 실행에 GameCellViewModel init. 나는 당신이 이해할 수 있는 저의 문제를 사전에 감사합니다! 에서 이를 위한 2 주 동안 지금
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
}
}
}
}