swift - 如何从 Firestore 获取数组字段并在 Swift 中写入 struct 字段?
问题描述
我面临的问题是,我可以访问 Firestore 中的每个字段并写入除数组和映射字段之外的结构。
我的 Firestore 数据类似于:
let data : [String : Any] = [
"name" : "House A",
"price" : 2000,
"contents" : [
"water" : true,
"internet" : false
]
]
这是 getDocument 函数:
let docRef = db.collection("example").document("example")
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let data = Houses(Doc: document)
...
...
...
} else {
print(error, "Item not found")
}
}
这是我的结构:
struct Houses {
var name: String?
var price: Int
var contents : Contents
init(Doc: DocumentSnapshot){
self.name = Doc.get("name") as? String ?? ""
self.price = Doc.get("price") as! Int
self.contents = Doc.get("contents") as! Contents
}
}
struct Contents {
var water: Bool
var internet : Bool
init?(data: [String: Any]) {
guard let water = data["water"] as? Bool,
let internet = data["internet"] as? Bool else {
return nil
}
self.water = water
self.internet = internet
}
}
另一个版本的内容:
struct Contents {
var water: Bool
var internet : Bool
init(Doc: DocumentSnapshot){
self.water = Doc.get("water") as! Bool
self.internet = Doc.get("internet") as! Bool
}
}
更新通过更改此行解决了问题:
self.contents = Doc.get("contents") as! Contents
至;
self.contents = Contents(data: Doc.get("contents") as! [String : Any])
name和price返回我的预期,但contents总是返回nil。我尝试配置内容,但结果相同。我想,我必须配置名为Contents的结构。
任何帮助,将不胜感激。