繁体   English   中英

使用Firebase Swift接收数据

[英]Receiving Data using Firebase swift

我正在尝试使用此代码(在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这就是“用户”。

watchEventType的块是异步的,有可能在您读取globalusername var时,该块尚未完成。

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

在此代码行中: usernamerecieved = globalusername在此行中,您所做的是将用户名的值设置为globalusername的值,即'user'。它应该是globalusername = usernamerecieved

另外有时从服务器检索数据有时会花费时间,原因可能很多:网络连接速度慢,图像检索等繁重的数据检索,但是在完成之前(从服务器检索动作),可能正在打印globalusername被调用,甚至在完成seebEventEvent之前,都已经完成了(因为它是异步的,有点类似于dispatch_async )。要解决这个问题,您应该在globalusername内部调用globalusername的打印调用,或者观察其值的任何变化通过对globalusername使用addObserverglobalusername在更改或更新globalusername的值时通知您,以便您可以采取相应的措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM