【问题标题】:Accessing values from Children Firebase从儿童 Firebase 访问值
【发布时间】:2016-09-30 10:31:29
【问题描述】:

我真的不太了解 Swift 3.0 Firebase 语法的更新,但最重要的是,从快照的子项中检索值似乎是不可能的。为此,我使用了这样的 sn-p:

 if let snapVal = snapshot.value as? [String: AnyObject] {
     for c in snapshot.children {
                        let cx = (c as! AnyObject)
                        let name = cx["NAME"] as! String

     }
}

我为此采取了很多方法,但是 FIRDatabaseSnapshot 在新的 Swift 3 更新中有很多限制,并且 AnyObject 不允许从对象中读取值,并且类似 NSDictionary 的类型也没有子对象。非常感谢所有帮助,谢谢!

【问题讨论】:

  • 什么是快照?
  • 快照属于 FIRDatasnapshot 类型

标签: swift firebase firebase-realtime-database swift3


【解决方案1】:

你收到的FIRDataSnapshot类型的snapShot其实是一个符合NSObject的自定义类,所以只有符合FIRDataSnapshot的变量才能访问FIRDataSnapshot提供的自定义函数比如.children

但是当你访问一个值为snap.value的新变量解析为[String:AnyObject]时,基本上它就变成了一个NSDictionary,而NSDictionary没有任何参数.children

  FIRDatabase.database().reference().child("your_Ref").observeSingleEvent(of: .value, with: {(snap) in

        for each in snap.children{

            print(each)


        }
      if let snapDict = snap.value as? [String:AnyObject]{

            for each in snapDict{

                let keyID = each.key
                let childValue = each.value["NAME"] as! String
            }
        }

    })

【讨论】:

  • 好收获!我忽略了第一行的转换。
  • 是的,但一旦我尝试:if child.hasChild("NAME"){ },它会显示Value of type 'NSFastEnumerationIterator.Element' (aka 'Any') has no member 'hasChild' @FrankvanPuffelen @Dravidian
  • 它提供了转换为 AnyObject 类型的选项,但这会导致后面的歧义
  • 我的回答只是向您解释基本概念,用于检索值 - 答案已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多