从 Firebase 读取/检索数据

Posted

技术标签:

【中文标题】从 Firebase 读取/检索数据【英文标题】:Reading/Retrieving Data From Firebase 【发布时间】:2017-05-08 23:55:45 【问题描述】:

我是 Swift 3 的初学者(使用 ios 8.3)。我一直在试图找出一种分离数据的方法,但没有运气。基本上,我可以从 Firebase 中提取以下数据:

 
Database =     
    Kelvin =         
        Institution = xxx;
        "Years of Experience" = "2.5";
        location = London;
    ;
    Sophia =         
        Institution = xxxx;
        "Years of Experience" = 3;
        location = London;
    ;
;
Users =     
    SOOlIFsjn3839jcmlBbVEnSRH3 =         
        email = "testing@gmail.com";
        password = 1234567;
    ;
;
       

但现在我想分离数据,以便它显示如下内容:

        var ref: FIRDatabaseReference!
          ref = FIRDatabase.database().reference()
            ref.observe(FIRDataEventType.value, with:  (snapshot) in

            if let mydata = snapshot.value as? NSDictionary 
                print(mydata)

                 if let namedata = mydata["Database"] as? NSArray 
                    print(namedata[0])  //Prints Kelvin
                    print(namedata[1])  //Prints Sofia

                

但是,Swift 不允许我这样做,它告诉我不能将 NSDictionary 类型转换为 NSArray。有任何想法吗?非常感谢。

【问题讨论】:

【参考方案1】:

Firebase 集合是键值对。 JSON的每一个key,都可以找到对应的value。

因此,您需要转换为 String、Object 的 NSDictionary。该字典中的键将是KelvinSophia。每个的值都是对应键下的值。

【讨论】:

【参考方案2】:

从 FIREBASE 数据库读取/检索数据到 NSDICTIONARY

每次变化时读取数据

您可以使用 FIRDataEventTypeValue 事件来读取给定路径上的数据,因为它在事件发生时就存在。此方法在附加侦听器时触发一次,并且在每次数据(包括任何子项)发生更改时再次触发。事件回调被传递一个快照,其中包含该位置的所有数据,包括子数据。如果没有数据,返回的快照值为nil。

/*FIREBASE VALUE_EVENT_LISTENER */
func getModelFromFirebase()

    var firDatabaseReference: FIRDatabaseReference!
    firDatabaseReference = FIRDatabase.database().reference(withPath: "referencePath")
    firDatabaseReference.child("referenceKey").child(bookingId).observe(FIRDataEventType.value, with:  (snapshot) in
        // Get user value
        let value = snapshot.value as? NSDictionary
        // Play with dict..

    )  (error) in
        print(error.localizedDescription)
    


一次读取数据

这对于只需要加载一次并且预计不会频繁更改或需要主动侦听的数据很有用。例如,前面示例中的博客应用程序在用户开始撰写新帖子时使用此方法加载用户的个人资料。

/* FIREBASE SINGLE_VALUE_EVENT_LISTENER */
func getModelFromFirebase()

    var firDatabaseReference: FIRDatabaseReference!
    firDatabaseReference = FIRDatabase.database().reference(withPath: "referencePath")
    firDatabaseReference.child("referenceKey").observeSingleEvent(of: .value, with:  (snapshot) in
        // Get user value
        let value = snapshot.value as? NSDictionary
        // play with data Snapshot...

    )  (error) in
        print(error.localizedDescription)
    



【讨论】:

以上是关于从 Firebase 读取/检索数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 检索和读取数据作为 NSArray (Swift 3)

Firebase 和 Flutter 是不是支持在 Web 上一次性读取?

将图片从 URL 上传到 Firebase 存储

使用 SwiftUI Xcode 11 从 firebase 实时数据库中检索数据

Python:无法从函数中读取返回值

从firebase数据库中检索计算平均值