You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:21:00