变量的值在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 中没有变化的主要内容,如果未能解决你的问题,请参考以下文章

我的变量的值在另一个文件中发生变化

volatile变量的值在多线程中不会改变

汇编中变量的旧值在哪里?

Do-While 循环,但 while 语句的值在 Do 语句内

为什么返回的值在Typescript中为'undefined'?

Postman内置的动态变量