fireStore 类型与 [字符串:任意] 不匹配



按照官方文档跳入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 想要一个 [字符串:任何] 类型的数据:

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)")
}

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

我认为设置数据应该看起来像这样:

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

这些是关键:价值对。左侧是 FireStore 中的字段名称,右侧是应写入其中的值。

所以我发现连接自定义结构(或类(的唯一方法有点丑陋,但它有效,但定义结构

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

}

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

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

最新更新