iOS Swift:从数据库中为当前登录的用户

时间:2016-11-27 18:33:32

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

如何从数据库中检索当前用户的值(用户名和用户ID除外,这似乎更容易获得)。

具有讽刺意味的是,我可以将值设置如下,并且可以正常工作:

let databaseRef = FIRDatabase.database().reference()
userID = (FIRAuth.auth()?.currentUser?.uid)! as String
databaseRef.child("users").child(userID!).child("TermCond").setValue("Yes")

但是对于我的生活,如果我只是想要检索当前的setValue值,我就无法确定要放的内容而不是TermCond。我想在

中使用value
let DesiredValue = databaseRef.child("users").child(userID!).child("TermCond").value as? String

就够了,但没有任何作用。我很困惑为什么检索这个值应该比设置它更困难。

2 个答案:

答案 0 :(得分:2)

To" read"来自Firebase的值,您需要添加每次该值更改时调用的引用侦听器。

在你的情况下,这可能是这样的:

let databaseRef = FIRDatabase.database().reference()
databaseRef.child("users").child(userID!).child("TermCond").observe(FIRDataEventType.value, with: { (snapshot) in
    let desiredValue = snapshot.value as? String
})

每次您的值更改时,此代码块都会被触发。如果您只想阅读一次,则可以使用observeSingleEvent:of:with代替observe:with

这与Firebase文档中所述:https://firebase.google.com/docs/database/ios/read-and-write

我建议您阅读整个 Documentation ,以了解Firebase的工作原理,因为它与传统数据库截然不同。

如果您想了解有关Firebase数据库及其工作原理的更多信息,我还可以推荐以下教程:https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2

答案 1 :(得分:0)

我现在已经解决了这个问题(基于Aleksander的回复)。我这样做的方式如下。

databaseRef.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        self.desiredValue = value?["TermCond"] as? String ?? ""
        self.LabelToShow.text = self.desiredValue!
    }) { (error) in
        print(error.localizedDescription)
}

这非常正常,并在iOS屏幕上的LabelToShow中显示TermCond的价值。