ฉันเป็นคนใหม่เพื่อ SwiftUI และ Firebase และฉันกำลังพยายามสร้างแรกของแอพ ฉันเป็นเกมจัดเก็บเอกสารใน Firestore และหนึ่งของช่องข้อมูลคือตารางคู่ลำดับที่บรรจุของผู้ใช้บัตรของเครื่องเล่นอย่างที่คุณสามารถมองเห็นในภาพได้ที่นี่
อย่างที่บอกฉันกำลังพยายามแสดงรายการของเกมส์ของให้ผู้ใช้และมีทั้งหมดเครื่องเล่นอยู่ในรายการในแต่ละคนของเซลล์(คำสั่งสำคัญมาก).
เพื่อสร้างรายการของเกมส์อยู่ในส่วนติดต่อผู้ใช้ฉันสร้าง GameCellListView และ GameCellViewModel. ที่ GameCellViewModel ควรจะโหลดทั้งสองคนเกมส์และอาเรย์ของผู้ใช้นั้นธ์ที่เครื่องเล่นของเกม แต่ฉันไม่สามารถโหลดข้อมูลผู้ใช้จะเป็นอาเรย์. ฉันต้องไปผ่านเครื่องเล่นอาเรย์กับการค้นหาฐานข้อมูลสำหรับแต่ละตัวและเพิ่มเข้าไปเป็นของผู้ใช้อาเรย์;งั้นฉันควรจะกลับไปนี่ของผู้ใช้อาเรย์. ตั้งแต่ฉันกำลังใช้สำหรับวงฉันไม่สามารถกำหนดค่าไปที่อาเรย์แล้วจากนั้นก็แลกเปลี่ยนมัน ฉันพยายามใช้แผนที่()แต่ฉันไม่สามารถแสดงการสืบค้นข้างในของมัน
เป้าหมายคือรถโหลดว่า"เรื่องทั้งหมด"variance กับ struct นั้นอย่างเราได้รับคำขู่แบบนี้เป็นเกมและเครื่องเล่นของมัน GamePlayers(players: [User], game: Game)
มันควรจะดูบางอย่างเหมือนรหัส snippet ด้านล่างนี้แต่งที่ผู้ใช้อาเรย์เสมอมาว่างเปล่า ฟังก์ชันนี้วิ่งอยู่ 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
}
}
}
}