这是我的数据结构:
{ "ItemData": {
"Item": [
{
"name": "Table",
"measurement ": [
{
"height": 30
},
{
"width": 50
}
]
}
]
}
}
我当前可以从firebase获取所有数据,并能够在tableview上显示名称。我现在正在尝试获取嵌套在"测量"中的值,即"高度"&'宽度'。我看了查看nested Child Swift的查询燃料,使用Swift和Firebase Swift 3 Xcode 8-通过观察结果迭代,但仍然没有任何线索如何解决如何解决Firebase的儿童构造数据的最佳方法?这个。
这是我的项目类:
class Item {
var name: String!
var measurement: String!
var key: String
init(from snapshot: FIRDataSnapshot) {
let snapshotValue = snapshot.value as? [String: Any]
self.name = snapshotValue!["name"] as! String
self.measurement = snapshotValue?["measurement"] as! String
self.key = snapshot.key
}
}
这是我用来获取项目的功能。ItemManager是一个可以删除并添加项目数组的函数的类:
func fetchItem() {
let databaseRef = FIRDatabase.database().reference(withPath: "ItemData/Item/")
databaseRef.observe(.value, with: { snapshot in
ItemManager.shared.removeAll()
for item in snapshot.children {
guard let snapshot = item as? FIRDataSnapshot else { continue }
let item = Item(from: snapshot)
ItemManager.shared.additem(item)
print(snapshot)
}
self.tableView.reloadData()
})
}
如果可以的话,请帮助我:(
如注释measurement
字典中所建议的不是字符串,因此,如果您想从中获取height
和width
,则可以这样。
class Item {
var name: String!
var heightMeasurement: String!
var widthMeasurement: String!
var key: String
init(from snapshot: FIRDataSnapshot) {
let snapshotValue = snapshot.value as? [String: Any]
self.name = snapshotValue!["name"] as! String
if let array = snapshotValue["measurement"] as? [[String:Any]],
let heightDic = array.first, let height = heightDic["height"],
let widthDic = array.last, let width = widthDic["width"] {
self.heightMeasurement = "(height)"
self.widthMeasurement = "(width)"
print(height, width)
}
else {
self.heightMeasurement = "" //set some default value
self.widthMeasurement = "" //set some default value
}
self.key = snapshot.key
}
}
注意:如果您的数组具有两个以上的对象,而不是获得height
和width
,则需要先订阅数组索引以获取字典,然后根据您的值访问其键。