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
相关产品推荐
相关产品推荐

