我在firebase中有一个数据结构,我在tableview上显示数据。我从firebase获取数据。 tableview部分是硬编码,如 Motivation,Success等.. 。解析这些数据的最佳方法是什么,这样当我在firebase控制台中添加一个新的部分时,它会为tableview上的部分添加该部分和数据,而不需要对这些部分进行硬编码?在正确的方向上的任何帮助将不胜感激,阅读firebase文档,但似乎无法弄明白。
数据结构
{
"categories" : {
"motivation" : {
"one" : {
"name" : "Bob",
"title" : "Get up stand up"
},
"two" : {
"name" : "Arsitotle",
"title" : "Great philosopher"
}
},
"success" : {
"one" : {
"name" : "Les",
"title" : "You're great"
},
"three" : {
"name" : "Bob",
"title" : "One love"
},
"two" : {
"name" : "Wayne",
"title" : "You will be great"
}
}
}
}
**检索数据**
ref.child("categories/motivation").observe(.childAdded, with: {(snapshot:DataSnapshot) in
if let values = snapshot.value as? [String:String] {
self.motivationDictionary.insert(values, at: 0)
}
})
}
ref.child("categories/success").observe(.childAdded, with: {(snapshot:DataSnapshot) in
if let values = snapshot.value as? [String:String] {
self.successDictionary.insert(values, at: 0)
}
})
}
我知道这不是最好的方法,但它有效。有点多余,但我是firebase和数据库的新手。
答案 0 :(得分:0)
所以你有一个固定数量的词典,每个词典都有一个名字(motivationDictionary,successDictionary)。
相反,您可以拥有字典词典(例如在数据结构中),这样顶级字典包含类别,并且在每个键下您都有一个该类别的值字典,即新的self.categories["motivation"]
是与旧的self.motivationDictionary
相同,等等。
这应该可行,但是对原始字典和字符串进行操作不是最好的做法。对于其他一些语言(如Lisps),这种方法可能是典型的,但对于Swift来说却不是这样。
在Swift中,您应该定义模型类,并将DataSnapshot解析为这些类的实例。例如,如果您从:
开始struct Item {
let name: String
let title: String
}
class Category {
let name: String = ""
var items: [String: Item] = [:]
}
class TableDataModel {
var sections: [Category] = []
}
然后在observe
内,您可以填充TableDataModel,然后从模型中重新加载表。通过这种方式,Swift编译器可以帮助您更好地确保程序正确,代码更清晰。