将 Firestore 数据转换为自己的数组格式

Convert Firestore Data into own Array format

到目前为止,我将类别数据存储在一个数组中并显示它们。

var categories: [BusinessCategory] = [
    .init(id: "id1", name: "Doctor", image: "https://icon.url"),
    .init(id: "id2", name: "Restaurant", image: "https://icon.url"),
    .init(id: "id4", name: "Citizen Service", image: "https://icon.url"),
    .init(id: "id5", name: "Barber Shop", image: "https://icon.url"),
    .init(id: "id6", name: "Corona-Test", image: "https://icon.url")
]

我想使用 Firestore 将其移动到数据库中。在不同的文档中存储类别后,使用getDocuments()

时格式当然不同
func getAllCategories(){
    database.collection("categories").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                print("\(document.data())")
            }
        }
    }

}

getDocuments() 调用的结果是:

["image": https://icon.url, "name": Restaurant, "id": 2]
["image": https://icon.url, "name": Citizen Service, "id": 3]
["image": https://icon.url, "name": Doctor, "id": 1]
["image": https://icon.url, "name": Corona-Test, "id": 5]
["image": https://icon.url, "name": Barber Shop, "id": 4]

关于如何以最佳方式做到这一点有什么想法吗?我需要转换所有类别

["image": https://icon.url, "name": Doctor, "id": 1]

进入

.init(id: "id1", name: "Doctor", image: "https://icon.url"),
  1. 您可以在项目中创建一个名为 BusinessCategories 的结构来存储每个类别项。您将需要使用 Codable 协议并使用 setData 函数(写入函数)在 Firestore 中创建必要的文件。
struct BusinessCategories: Codable, Identificable {

var id: String
var name: String
var image: String

enum CodingKeys: String, CodingKey {
case id
case name
case image
}

}
  1. 在 Firestore 中存储数据模型 BusinessCategories 后,您可以通过 getDocumentssnapshotlisteners 取回它们。

  2. 一旦你从 Firestore retrieve/read BusinessCategories 文档,你可以解码(使用 for-loop 将文档转换成你已经创建的结构)Firestore 数据进入您事先创建的结构。

到目前为止,这是执行所需任务的最干净、最常用的方法。你也可以参考这个教程 - https://www.youtube.com/watch?v=3-yQeAf3bLE

否则,如果您真的想将 BusinessCategories 聚集到一个数组中。您将不断遇到您当前面临的问题,您将需要(我认为很困难)定制来转换数据,这绝对是一项艰巨的任务。