如何在视图中显示以下数据:
[
"parties" {
"2016-12-30" {
"uid" {
"name": "joe",
"age": "32"
},
"uid" {
"name": "kevin",
"age": "29"
}
},
"2016-12-25" {
"uid" {
"name": "ben"
"age": "44"
}
}
}
]
在我的控制器中我有
var parties = [Party]()
DataService.ds.REF_PARTIES.observe(.value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
print(snapshot)
for snap in snapshot {
if let partyDict = snap.value as? [String: AnyObject] {
let key = snap.key // the party date
let party = Party(date: key, partyData: partyDict)
self.parties.append(party)
}
}
}
self.tableView.reloadData()
})
类PartyFeedCell:UITableViewCell:
func configureCell(party: Party) {
dateLabel.text = part.date // date as expected
}
在做出反应时,我可以使用Object.key
深入循环并获取这些日期(密钥)的用户。有没有办法实现这个目标?在xxx
日期之下,我应该看到一个用户列表。
Party.swift:
import Foundation
class Party {
private var _name: String!
private var _age: String!
var name: String {
return _name
}
[...]
init(name: String, age: String) {
self._name = name
self._age = age
}
init(date: String, partyData: [String: AnyObject]) {
self._date = date
[...]
}
}
DataService.swift:
import Foundation
import FirebaseDatabase
let DB_BASE = FIRDatabase.database().reference()
class DataService {
static let ds = DataService()
private var _REF_BASE = DB_BASE
private var _REF_PARTIES = DB_BASE.child("parties").queryOrderedByKey()
var REF_BASE: FIRDatabaseReference {
return _REF_BASE
}
var REF_PARTIES: FIRDatabaseQuery {
return _REF_PARTIES
}
}
答案 0 :(得分:1)
两件事:
使用日期作为密钥...虽然可能没问题,但应该更改 - 最佳做法是将密钥与子代中包含的数据取消关联。
parties
-Y9809s0asas
date: "2016-12-30"
users:
uid_0: true
uid_1: true
-Y89js99skks
date: "2016-12-15"
users:
uid_1: true
uid_3: true
users
uid_0:
name: "ben"
age: "42"
uid_1:
name: "frank"
age: "28"
etc
派对内的密钥由childByAutoId(Y9809s0asas等)生成
第二件事是代码看起来非常好。问题似乎是如何从字典中获取值?
在这种情况下,代码将snap.value指定为[String:AnyObject]的字典给partyDict。所以在这一点上,partyDict只是一个关键词:值对
所以在你的Party课堂中,只需要完成一项简单的任务:
init(date: String, partyData: [String: AnyObject]) {
self._date = date
self._age = partyData["age"]
self._name = partyData["name"]
}
我没有运行你的代码,但它非常接近可用。
哦 - 随着结构的这种改变,你会想要为Party类添加一个属性,key。确保将父节点名称(snap.key)传递给类,因此如果需要更新等,则会存储父节点名称(来自上述结构的Y9809s0asas)