【问题标题】:fireStore type does not match [String:any]fireStore 类型不匹配 [String:any]
【发布时间】:2020-05-22 12:35:06
【问题描述】:

按照官方文档跳入FireStore,尝试将Struct连接到Firestore/setdata函数,根据文档,Cloud Firestore将对象转换为支持的数据类型并可以处理自定义类

所以结构如下:

public struct City: Codable {

let name: String
let state: String?
let country: String?
let isCapital: Bool?
let population: Int64?

enum CodingKeys: String, CodingKey {
    case name
    case state
    case country
    case isCapital = "capital"
    case population
}

}

并上传数据如下。 Firestore 需要 [String: Any] 类型的数据:

 let city = City(name: "Los Angeles",
                state: "CA",
                country: "USA",
                isCapital: false,
                population: 5000000)

do {
    try db.collection("cities").document("LA").setData(city) // <--- Cannot convert value of type 'postData' to expected argument type '[String : Any]'

} catch let error { 
    print("Error writing city to Firestore: \(error)")
}

知道如何解决这个问题吗?

【问题讨论】:

    标签: swift google-cloud-firestore


    【解决方案1】:

    我觉得设置数据应该更像这样:

            db.collection("cities").document("LA").setData([
                cityName: city.name,
                cityState: city.state,
                // And so on...
            ])
    

    这些是键:值对。左边是FireStore中的字段名,右边是应该写入的值。

    【讨论】:

    • 是的,当然你可以用这种方式硬插入它,它可以工作,但文档说 firestore 可以连接到自定义类和结构,他们自己的示例显示它没有。
    【解决方案2】:

    所以我发现连接自定义结构(或类)的唯一方法有点难看,但它可以工作,但将结构定义如下

    public struct City: Codable {
    
    let name: String
    let state: String
    
    var DataToPass : [String:Any] {
        return [
    
            "name" : self.name,
            "state" : self.state
    
        ]
    
    
    }
    

    然后使用 datapass 将其简单地传递给 FStore:

    let city = City(name: "Los Angeles",
                    state: "CA")
    db.collection("cities").document("LA").setData(city.dataToPass)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多