到目前为止,我将类别数据存储在一个数组中并显示它们。
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"),
- 您可以创建一个名为
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
}
}
在Firestore中存储数据模型
BusinessCategories
后,您可以通过getDocuments
或snapshotlisteners
检索它们。一旦你从Firestore中检索/读取
BusinessCategories
文档,你可以解码(使用for-loop将文档转换为你已经创建的结构体)Firestore数据到你已经事先创建的结构体。
到目前为止,这是执行所需任务的最干净、最常用的方法。您也可以参考本教程- https://www.youtube.com/watch?v=3-yQeAf3bLE
否则,如果您真的想将BusinessCategories聚集到一个数组中。你将不断遇到你目前面临的问题,你将需要(困难,我认为)定制转换数据,绝对是一个艰巨的任务。