Firebase - 在Swift中将所有子键和子值检索到单独的数组中

时间:2017-07-16 07:15:28

标签: ios arrays swift firebase firebase-realtime-database

有没有办法检索子项中的所有键,将它们放入数组,然后检索键的值并将其放入另一个数组?

源代码:

self.ref?.child("data").child("success").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
   if snapshot != nil {
        // Your answer goes here
   }
}

3 个答案:

答案 0 :(得分:20)

快照有两个属性。

snapshot.key
snapshot.value

使用.value的观察者时。所有关键:值子项在快照中返回。可以迭代它们来捕获每个键:这样的值对。

ref.observeSingleEvent(of: .value, with: { (snapshot) in
    for child in snapshot.children {
        let snap = child as! DataSnapshot
        let key = snap.key
        let value = snap.value
        print("key = \(key)  value = \(value!)")
    }
})

请记住,value属性可以是字符串,数字,数组或其他字典(快照)。在原始问题中,它是一个字符串。

答案 1 :(得分:5)

我想在我的项目中做类似的事情。希望这会有所帮助,你会明白这个想法

var photosList = [String]()
refToObserve?.observeSingleEvent(of: .value, with: {snapshot in
        if let snapshotValue = snapshot.value as? [String:Any] {
            for child in snapshot.childSnapshot(forPath: ***your path***).children {
                let myChild = child as! DataSnapshot
                if let myChildValue = myChild.value as? [String:Any] {
                    self.photosList.append(myChildValue["postId"] as! String)
                }
            }
        }
    })

答案 2 :(得分:4)

这样的事情应该有效(使用更好的命名变量):

  1. snapshot.value投射为字典
  2. 使用字典' .keys& .values个属性可将其LazyMapCollection类型检索。
  3. 使用集合初始化数组。
  4. <强>代码:

    self.ref?
        .child("data")
        .child("success")
        .child(userID!)
        .observeSingleEvent(of: .value, with: { (snapshot) in
            if let data = snapshot.value as? [String: Any] {
                let keys = Array(data.keys)
                let values = Array(data.values)
                ... // Your code here
            }
        }
    

    更新 - 显示遵守订单的示例:

    我可能会将字典保存到一个数组中,然后将其转换为Array<(key: String, value: Any)>类型。然后,您可以将其映射到键或值并保持顺序。

    ... // As above
        .observeSingleEvent(of: .value, with: { (snapshot) in
            if let data = snapshot.value as? [String: Any] {
                let dataArray = Array(data)
                let keys = dataArray.map { $0.0 }
                let values = dataArray.map { $0.1 }
                ... // Your code here
            }
        }