如何在嵌套for循环中给两个数组添加数据?Firestore中scores为空怎么解决
问题修复方案
根因分析
Swift中的字典为值类型,你代码中的执行顺序存在逻辑错误:
- 你先初始化了带空scores的
playerData字典,直接将它的副本追加到了data["players"]数组中 - 后续内层循环修改的只是原始的
playerData变量,已经存入数组的副本不会同步更新,最终提交到Firestore的数据自然就没有scores内容
修复后的代码
只需要调整playerData追加到数组的顺序,放在内层scores赋值完成之后执行即可:
func updateCourseData() { var data = ["endTime": Timestamp(date: Date()), "players": []] as [String : Any] for i in 0..<players.count { var playerData = ["playerId": games[i].id, "scores": []] as [String : Any] // 先执行内层循环给scores赋值 for score in 0..<selectedPage + 1 { let scoreData = ["hole": games[i].scores[score].hole, "score": games[i].scores[score].score] as [String : Any] var existingScores = playerData["scores"] as? [[String: Any]] ?? [[String: Any]]() existingScores.append(scoreData) playerData["scores"] = existingScores } // scores赋值完成后,再把完整的playerData追加到players数组 var existingItems = data["players"] as? [[String: Any]] ?? [[String: Any]]() existingItems.append(playerData) data["players"] = existingItems } Constants.FirebaseCollection.gamesCollection.document(documentId).updateData(data) { error in if let error = error { print(error.localizedDescription) } print("Game updated") } }
内容的提问来源于stack exchange,提问作者tonileipo
相关产品推荐
相关产品推荐

