我是Swift的新手。我知道如何从Firebase获取单个数据,但是当我尝试将数据列表添加到数组中时,我没有得到错误或没有数据。请帮我。我几天来一直在努力。 我想将Firebase中的数据添加到数组中, 我创建了带有类别列表的json文件,并在firebase中导入。
我的JSON文件如下所示:
{
"Category" : [ {
"categoryId" : "1",
"imageName" : "cat_001.png",
"title" : "CAT"
}, {
"categoryId" : "2",
"imageName" : "dog_001.png",
"title" : "DOG"
}, {
"categoryId" : "3",
"imageName" : "fish_001.png",
"title" : "FISH"
}, {
"categoryId" : "4",
"imageName" : "bird_001.png",
"title" : "BRID"
}]
}
Firebase数据库看起来像 this
类别类看起来像这样
struct Category {
private(set) public var title: String
private(set) public var imageName: String
init(title: String, imageName: String) {
self.title = title
self.imageName = imageName
}
}
我使用自定义单元格来显示我的数据,这是我的自定义单元格类
class CategoryCell: UITableViewCell {
@IBOutlet weak var categoryImage: UIImageView!
@IBOutlet weak var categoryTitle: UILabel!
func updateViews(category: Category){
categoryImage.image = UIImage(named: category.imageName)
categoryTitle.text = category.title
}
}
我使用DataService类来获取数据,现在数据是硬编码的,并且工作正常。
class DataService{
static let instance = DataService()
// How to add data from firebase in here`?
private let categories = [Category(title: "CAT", imageName: "cat_001"),
Category(title: "DOG", imageName: "dog_001"),
Category(title: "FISH", imageName: "fish_001")]
func getCategories() -> [Category]{
return categories
}
}
最后这是我的ViewController
class CategoriesVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var categoryTable: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
categoryTable.dataSource = self
categoryTable.delegate = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return DataService.instance.getCategories().count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell") as? CategoryCell {
let category = DataService.instance.getCategories()[indexPath.row]
cell.updateViews(category: category)
return cell
}else{
return CategoryCell()
}
}
}
我将来会添加更多类别。 使用硬编码数据,我的应用程序看起来像this,我希望使用来自firebase的数据获得相同的结果。
答案 0 :(得分:1)
尝试这样,只需对tableview数据源使用Category的数组:
var tableData = [Category]()
然后在viewDidLoad中,设置一个firebase观察者,以便在firebase中的Category节点发生更改时更新该数组:
ref.child("Category").observe(.value, with: { snapshot in
var newTableData: [Category] = []
for category in snapshot.children {
let dict = category.value as! [String: AnyObject]
let title = dict["title"] as! String
let imageName = dict["imageName"] as! String
let newCategory = Category(title: title,
imageName: imageName)
newTableData.append(newCategory)
}
self.tableData = newTableData
self.tableview.reloadData()
})