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



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

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中检索/读取BusinessCategories文档,你可以解码(使用for-loop将文档转换为你已经创建的结构体)Firestore数据到你已经事先创建的结构体。

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

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

最新更新