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

SwiftUI中Firestore保存Int键Map字段崩溃,求解决方案

解决Firestore保存Int键Map字段崩溃的问题

Firestore的Map类型字段仅支持字符串作为键,你代码里直接传入[Int: String]类型的字典,Firestore无法识别这种键类型,这就是保存失败并崩溃的原因。

修改方案:将Int键转为String键

把原有的整数键字典转换为字符串键的字典,再传入Firestore:

func save(id: String, order: [Int : String]) { //order example: [1 : "Mary", 2: "Susie"...]
        let database = Firestore.firestore()
        // 将Int键转换为String键的字典
        let stringKeyedOrder = Dictionary(uniqueKeysWithValues: order.map { (String($0.key), $0.value) })
        database.collection("MyCollection").document(id).setData(
            ["id": id,
             "order": stringKeyedOrder
            ]) { error in
            if error == nil {
                self.parent.getData()
            }
            else {
                print(error!)
            }
        }
    }

读取时的反向转换

如果需要从Firestore读取该字段并转回[Int: String],可以这样处理:

// 假设document是从Firestore获取的DocumentSnapshot实例
if let stringOrder = document["order"] as? [String: String] {
    let intKeyedOrder = stringOrder.reduce(into: [Int: String]()) { result, pair in
        if let intKey = Int(pair.key) {
            result[intKey] = pair.value
        }
    }
    // 使用转换后的intKeyedOrder
}

内容的提问来源于stack exchange,提问作者J. Holliday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:11