[英]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
使用addObserver
, globalusername
在更改或更新globalusername
的值时通知您,以便您可以采取相应的措施。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.