मैं नया हूँ करने के लिए SwiftUI और Firebase और मैं कोशिश कर रहा हूँ का निर्माण करने के लिए मेरी पहली app है । मैं भंडारण के खेल में दस्तावेजों Firestore और क्षेत्रों में से एक है एक सरणी से युक्त उपयोगकर्ता आईडी के खिलाड़ियों के रूप में आप छवि में देख सकते हैं.
कहा जा रहा है कि, मैं कोशिश कर रहा हूँ करने के लिए सूची में सभी खेलों के एक उपयोगकर्ता हैं और सभी खिलाड़ियों में सूचीबद्ध प्रत्येक कोशिकाओं में से एक (क्रम महत्वपूर्ण है).
आदेश में बनाने के लिए खेलों की सूची में यूआई मैं बनाया एक GameCellListView और एक GameCellViewModel. के GameCellViewModel लोड करना चाहिए दोनों का खेल है और सरणी उपयोगकर्ताओं के अनुरूप है कि खिलाड़ियों के लिए प्रत्येक खेल के. हालांकि मैं कर रहा हूँ में सक्षम नहीं होने के लिए लोड करने के लिए उपयोगकर्ताओं की एक सरणी. मैं जाने के लिए खिलाड़ियों के माध्यम से सरणी और डेटाबेस क्वेरी के लिए प्रत्येक आईडी और संलग्न करने के लिए एक उपयोगकर्ता सरणी है, तो मैं करने में सक्षम होना चाहिए वापसी इस उपयोगकर्ता की सरणी. के बाद से मैं उपयोग कर रहा हूँ एक पाश के लिए, मैं नहीं कर सकते हैं आवंटित करने के लिए मानों की सरणी और फिर इसे वापस. मैं प्रयोग करने की कोशिश का नक्शा(), लेकिन मैं नहीं कर सकते हैं प्रदर्शन एक क्वेरी के अंदर ।
लक्ष्य को लोड करने के लिए है कि "सभी" 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
}
}
}
}