迭代嵌套子项。Firebase 和 Swift 3.

14 浏览
0 Comments

迭代嵌套子项。Firebase 和 Swift 3.

以下是我的数据结构:\n{ \"ItemData\": {\n \"Item\": [\n {\n \"name\": \"Table\",\n \"measurement \": [\n {\n \"height\": 30\n },\n {\n \"width\": 50\n }\n ]\n }\n ]\n }\n}\n\n我目前可以从Firebase中获取所有数据,并能够在tableView上显示名称。我现在想要获取嵌套在\'measurement\'内部的值,即\'height\'和\'width\'。我已经查看了Query Firebase for nested child swiftWhat\'s the best way of structuring data on firebase?Iterate through nested snapshot children in Firebase using SwiftFirebase Swift 3 Xcode 8 - iterate through observe results,但仍然不知道如何解决这个问题。\n这是我的Item类:\nclass Item {\n var name: String!\n var measurement: String!\n var key: String\n init(from snapshot: FIRDataSnapshot) {\n let snapshotValue = snapshot.value as? [String: Any]\n self.name = snapshotValue![\"name\"] as! String\n self.measurement = snapshotValue?[\"measurement\"] as! String\n self.key = snapshot.key\n }\n}\n\n这是我用来获取项目的函数。ItemManager是一个具有删除和添加Item数组的函数的类:\nfunc fetchItem() {\n let databaseRef = FIRDatabase.database().reference(withPath: \"ItemData/Item/\")\n databaseRef.observe(.value, with: { snapshot in\n ItemManager.shared.removeAll()\n for item in snapshot.children {\n guard let snapshot = item as? FIRDataSnapshot else { continue }\n let item = Item(from: snapshot)\n ItemManager.shared.additem(item)\n print(snapshot)\n }\n self.tableView.reloadData()\n })\n}\n\n如果您可以帮助我,那就太好了 🙂

0
0 Comments

问题的原因是数据结构不匹配,数组中的元素应该是字典而不是字符串。解决方法是将数组中的元素转换为字典,并从中获取所需的值。

首先,我们定义一个Item类,其中包含name、heightMeasurement、widthMeasurement和key等属性。在初始化方法中,我们将从Firebase数据库中获取的snapshot转换为字典,并从中获取name和measurement数组。然后,我们将通过下标访问数组中的第一个和最后一个元素,分别获取height和width的值。如果无法获取这些值,我们将为heightMeasurement和widthMeasurement设置默认值。最后,将key的值设置为snapshot的key。

在问题的评论中,有人建议将数组的类型从[[String:Int]]更改为[[String:Any]]。这样就可以正确地将字符串转换为字典。

有人问如何在UILabel上显示这些值。建议将cell.heightLbl.text设置为item.heightMeasurement,width也是同样的操作。

最后,有人确认问题已解决,并对答案进行了编辑,将[[String:Int]]更正为[[String:Any]]。

以上是问题的原因和解决方法的整理。

0