使用Firebase swift接收数据

时间:2016-08-06 18:00:01

标签: ios swift firebase firebase-realtime-database

我正在尝试使用此代码(在viewdidload中声明)从Firebase数据库中检索Childs

let rootRef = FIRDatabase.database().reference().child("UsersInfo").child((FIRAuth.auth()?.currentUser?.uid)!)
rootRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in

     let hello = snapshot.value as! [String : AnyObject]
     let usernamerecieved = hello["Username"] as! String
     let Emailrecieved = hello["Email"] as! String
     let bloodtyperecieved = hello["BloodType"] as! String

     globalusername = usernamerecieved (EDITED)

})

我已经宣布了一个全局变量

var globalusername = "user"

我试图提取usernamerecieved变量并将其转换为全局变量。但是,当我稍后在viewdidLoad中打印全局变量时,我仍然得到globalusername的初始值,即“user”。

2 个答案:

答案 0 :(得分:0)

observeEventType的块是异步的,当你读取globalusername var时,该块可能还没有完成。

尝试在块内打印globalusername并查看值

答案 1 :(得分:0)

在这行代码中:usernamerecieved = globalusername你在这一行中所做的是你将usernamerecieved的值设置为globalusername的值,即'user' 它应该是globalusername = usernamerecieved

有时需要花费时间从服务器检索数据的原因可能很多 - 网络连接速度慢,图像等重要数据检索等但在完成之前(从服务器检索动作)可能有线在你打印globalusername之前,首先调用dispatch_async被调用,甚至在完成后,关闭observeEventType甚至完成(因为它是异步的,有点类似于globalusername)。为了解决这个问题,你应该调用打印调用addObserver位于completionBlock中,或globalusername使用globalusername来查看其价值的任何变化,只要Product ID | Product Name | Qty | Price ----------------------------------------------------- 1 | Adidas | 1 | $50 | Delete Btn 的值被更改或更新,就会通知您你可以采取相应的行动。