变量的值在observeSingleEvent 中没有变化
Posted
技术标签:
【中文标题】变量的值在observeSingleEvent 中没有变化【英文标题】:Value of variable not changing in observeSingleEvent 【发布时间】:2017-03-28 13:57:35 【问题描述】:变量 num 在observeSingleEvent 中更改为我想要的,但就在它变回空值之后。我如何让 num 的值改变?
var num = Int()
FIRDatabase.database().reference().child("menus/Day1").observeSingleEvent(of: .value, with: (snap) in
print(snap)
if let snapDict = snap.value as? [String:AnyObject]
self.num = snapDict["date"] as! Int
print(num)
//returns the number I want
)
print(num)
//Returns an empty value
if num == 5
print("number is 5")
else
print("number is not 5")
//goes to this
【问题讨论】:
若要同时获取数据更改,请使用observeEventOfType
而不是observeSingleEvent
。
@FrankvanPuffelen 非常感谢!
第二个print(num)
是空值的原因是因为Firebase 是异步的。最后一次打印在完成处理程序中的打印之前执行。
@dstepan 我想在从数据库中获取值后将 num 变量用于 if 语句。如果它是异步的,我该怎么做?
在下面查看我的答案。
【参考方案1】:
您需要对从 Firebase 返回的值执行的任何工作都必须在完成处理程序(方法调用的 with
部分)中完成。要使用/操作您从 Firebase 获得的 num
值,您需要在完成处理程序中使用它。
var num = Int()
FIRDatabase.database().reference().child("menus/Day1").observeSingleEvent(of: .value, with: (snap) in
print(snap)
if let snapDict = snap.value as? [String:AnyObject]
self.num = snapDict["date"] as! Int
if self.num == 5
print("number is 5")
else
print("number is not 5")
)
【讨论】:
以上是关于变量的值在observeSingleEvent 中没有变化的主要内容,如果未能解决你的问题,请参考以下文章
Do-While 循环,但 while 语句的值在 Do 语句内