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】:

尝试访问FIRDataSnapshotvalue属性以获取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 存储图像持久性

将 Firebase 快照投射到 Swift 3 对象

在 Swift 3 中包含字典的 Firebase 进程子快照

Swift 3 从 Firebase 获取用户数据

无法访问 Firestore 快照中的数据以将标记添加到存储在 Firebase 中的 Google 地图

Swift Firebase 快照查询缺少孩子