Проблема, с которой я столкнулся, заключается в том, что я могу добраться до любого поля в 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
до *; 1018 *
self.contents = Contents(data: Doc.get("contents") as! [String : Any])
имя и цена возвращает то, что я ожидал, но содержимое всегда возвращает ноль . Я пытался настроить Содержание , но результаты те же. Я думаю, я должен настроить структуру с именем Содержание .
Буду признателен за любую помощь.