访问唯一 AutoID 中的 Firebase 数据
Posted
技术标签:
【中文标题】访问唯一 AutoID 中的 Firebase 数据【英文标题】:Accessing Firebase Data inside unique AutoID 【发布时间】:2017-12-30 20:09:50 【问题描述】:这是我的第一个问题,我还在学习 Swift/Xcode/Firebase,感谢您的耐心等待。我一直在跟踪 ***,并找到了很多可以帮助解决各种问题的答案,但对于我 2 天以来一直在努力解决的问题,没有任何意义。
我正在编写一个程序,它将保存在前一个视图控制器上选择的日期和一组用户输入的从文本字段中输入的浮点数到 Firebase 数据库,并将每个数据集作为单独的条目附加,而不是覆盖以前的数据。使用下面的第一个代码块,我已经解决了这个问题,除了我找不到不使用 AutoID 的方法。这让我在 Firebase 中有这样的设置,但每个类别中有多个类别和“optionSelected”部分:
程序名称 类别 1 选项已选择 L1cggMnqFqaJf1a7UOv 日期:“21-12-2017” 变量 1 浮点数:“12345” 变量 2 浮点数:“26.51” L1ciVpLq1yXm5khimQC 日期:“30-12-2017” 变量 1 浮点数:“23456” 变量 2 浮点数:“35.88”用于保存的代码:
func newWithNewVars()
let myDatabase = Database.database().reference().child("Category 1").child(optionSelected)
let variable1 = textField1.text
let variable2 = textField2.text
let variable1Float = (textField1.text! as NSString).floatValue
let variable2Float = (textField2.text! as NSString).floatValue
let writeArray = ["Date": textPassedOverDate, "Variable 1 Float": variable1Float, "Variable 2 Float": variable2Float]
myDatabase.childByAutoId().setValue(gasArray)
(error, reference) in
if error != nil
print(error!)
else
print("Message saved successfully!")
问题在于调用数据。由于 AutoID 是唯一的,我无法弄清楚如何更深入地访问数据以进行计算。具体来说,我希望能够创建一个新条目,按下保存数据按钮,并让它在“optionSelected”部分中找到最新条目,以便它可以进行计算,例如从新变量 1 中减去旧变量 1 和这样的。
鉴于上述描述、布局和上面使用的代码,哪种代码结构可以让我找到最近的日期并访问 AutoID 部分中特定类别和“optionSelected”的数据?
感谢您的帮助。
【问题讨论】:
【参考方案1】:您遇到的问题是您正在尝试更深入地挖掘,但由于您没有该 ID,因此无法深入挖掘。当您想要进入 JSON 树中的列表时,您需要在参考观察中使用 .childAdded
,而您没有持有该 id 可以进入 - 这将被调用多次类别 1 树中有值:
let reference = Database.database().reference()
reference.child("Category 1").child("optionSelected").observe(.childAdded, with: (snapshot) in
let uniqueKey = snapshot.key // IF YOU WANT ACCESS TO THAT UNIQUE ID
print(uniqueKey)
guard let dictionary = snapshot.value as? [String: AnyObject] else return
let date = dictionary["date"] as? String
let variableOne = dictionary["Variable 1 Float"] as? Float
let variableOne = dictionary["Variable 2 Float"] as? Float
, withCancel: nil)
您可能还希望避免在数据库键中使用空格,以避免在不久的将来出现任何问题。我会坚持使用常见的小写下划线做法,例如“category_1”或“variable_2_float”
【讨论】:
非常感谢,这有助于对浮点变量代码进行微调(如下)。它不会让我转换字符串?到浮动?,所以我不得不做一个两步转换。我也许可以在一行中完成,但这也使字符串版本可用于我的错误检查。let variableOne = (dictionary["Variable 1 Float"] as? String)! let variableOneFloat = Float(variableOne)
我将更新我的数据库密钥以匹配您建议的格式,也谢谢您。
很棒的人。乐意效劳。您可以通过将其向下转换为浮点数而不是字符串来在一行中执行此操作,但我知道 Firebase 可能有点棘手,因为我认为它只能存储字符串、布尔值和 NSNumber。如果这在下面不起作用,尽管您的解决方案可能过于矫枉过正,但它仍然可以正常工作。 let variableOne = (dictionary["Variable 1 Float"] as? Float以上是关于访问唯一 AutoID 中的 Firebase 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firebase 数据库中的 autoID 获取价值 - Swift
如何在 Firebase 中显示 autoID 子项下的数据?