首页 > 解决方案 > 如何从 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])

nameprice返回我的预期,但contents总是返回nil。我尝试配置内容,但结果相同。我想,我必须配置名为Contents的结构。

任何帮助,将不胜感激。

标签: swiftfirebasestructgoogle-cloud-firestore

解决方案


推荐阅读