Firebase:使用 swift3 访问快照子项
Posted
技术标签:
【中文标题】Firebase:使用 swift3 访问快照子项【英文标题】:Firebase: Access a snapshots children using swift3 【发布时间】:2017-01-31 02:06:18 【问题描述】:我正在尝试获取我的快照的多个子项的值,以便按名称和速度附加我的 cellDataArray。 我的代码适用于名称,但不适用于速度..
ref = FIRDatabase.database().reference().child("BasicInfo")
let query = ref?.queryOrdered(byChild: "Operator")
query?.observeSingleEvent(of: .value, with: (snapshot) in
for child in snapshot.children.allObjects as! [FIRDataSnapshot]
let name = child.key
let speed = child.childSnapshot(forPath: "Speed")
self.cellDataArray.append(cellData(mainText: name, Speed: ""))
self.tableView.reloadData()
)
这是我的 Firebase 结构:
【问题讨论】:
不相关,但您需要在主线程上的for loop
之后重新加载tableView
。您能否展示一下您的 Firebase 结构。
好的,它就在那里!坦克你:)
【参考方案1】:
尝试访问FIRDataSnapshot
的value
属性以获取Speed
。
for child in snapshot.children.allObjects as! [FIRDataSnapshot]
let name = child.key
if let dic = child.value as? [String:Any], let speed = dic["Speed"] as? Int
let operator = dic["Operator"] as? String
print(operator)
self.cellDataArray.append(cellData(mainText: name, Speed: "\(speed)"))
DispatchQueue.main.async
self.tableView.reloadData()
【讨论】:
不,不是真的.. Bob 的所有子项的值似乎都作为每个键的一个值相加。但我无法验证,因为打印(dic)时我没有得到任何日志。你知道这是怎么来的吗?非常感谢!:) @user3138007 你能检查一下child.value
的输出吗?
对于 child.value 我得到: Optional( "Speed" = 30; Operator = "World Marine Offshore"; ) 这很奇怪,因为速度是“”
@user3138007 那么上面的解决方案会起作用,还是你的速度是字符串格式的?
是的,为什么速度是字符串格式的,而操作符不是?以上是关于Firebase:使用 swift3 访问快照子项的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中包含字典的 Firebase 进程子快照