Swift:如何从Firebase检索数据?

yuin265

我在firebase中的结构如下:

app name
   user ID
      wins = 7
      losses = 8

和我读取wins子节点的代码

ref = Database.database().reference().child(passUserID)
ref?.child("wins").observe(.childAdded, with: { (snapshot) in

     //Convert the info of the data into a string variable
     let getData = snapshot.value as? String
          print(getData)
})

但是它什么也不打印。

格温艾

要从Firebase读取数据,请将侦听器附加到创建FIRDatabase引用的路径上。FIRDatabaseReference表示Firebase数据库中的某个特定位置,在该位置上有一个子项的键值对列表。因此,在您的情况下,您已创建了一个对键“ wins”的Firebase引用,该引用仅指向一个值,而不是键-值对。到目前为止,您的参考是有效的:

    ref = Database.database().reference().child(passUserID) 

    //did you mean FIRDatabase and not Database??

此FIRDatabaseReference指向密钥passUserID,该密钥具有子项[“ wins”:“ 7”]和[“ loss”:“ 8”]的键值对列表(注意:密钥始终是字符串)。因此,从您的FIRDatabase参考中,您可以如下创建观察者,并读取“ wins”的值:

   ref?.observe(.childAdded, with: { (snapshot) in

    //Convert the info of the data into a string variable
    if let getData = snapshot.value as? [String:Any] {

        print(getData)

        let wins = getData["wins"] as? String

        print("\(wins)")

    }

})

添加儿童的事件将针对每个现有数据触发一次,快照值将是单个记录,而不是像value事件那样获得的整个列表。随着更多物品的进入,此事件将与每个物品一起触发。因此,如果“损失”是第一条记录,则您可能不会获得“胜利”的价值。这是您要达到的目标吗?如果您真正想知道的是该特定位置的“ wins”值,并且要知道该值是否发生过更改,则应使用.value观察器,如下所示:

    ref?.observe(.value, with: { (snapshot) in

    //Convert the info of the data into a string variable
    if let getData = snapshot.value as? [String:Any] {

        let wins = getData["wins"] as? String

        print("\(wins)") //check the value of wins is correct

    }

})

或者,如果您只是想一次了解获胜的价值,而又不担心知道是否有任何变化,请使用“ observeSingleEvent”而不是“ observe”。

编辑

我看到了您的图像,现在意识到您的参考文献也可能有问题。您的参考实际上应该是这样的:

    ref = FIRDatabase.database().reference().child("game-").child(passUserID)

您已经模糊了“游戏”是什么,但是对“胜利”的有效引用将包括在内。

第二编辑

我将添加以下内容,以便您可以正确调试问题。使用此模式观察值,看看是否返回错误,内容如下:

        ref.observe(.value, with: { (snapshot) in

             print(snapshot)

        }, withCancel: { (error) in

            print(error.localizedDescription)

        })

如果由于数据库规则而无法访问该Firebase位置,通常会给您一个错误。看看print(snapshot)是否返回上述任何内容也是一个好主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章