迭代一个嵌套的孩子.火箱和迅速3



这是我的数据结构:

{ "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字典中所建议的不是字符串,因此,如果您想从中获取heightwidth,则可以这样。

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     
    }
}

注意:如果您的数组具有两个以上的对象,而不是获得heightwidth,则需要先订阅数组索引以获取字典,然后根据您的值访问其键。

相关内容

  • 没有找到相关文章

最新更新