【问题标题】:Value of variable not changing in observeSingleEvent变量的值在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 语句。如果它是异步的,我该怎么做?
  • 在下面查看我的答案。

标签: ios swift firebase swift3 firebase-realtime-database


【解决方案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")
        }
    }
})

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 2020-10-30
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2019-06-05
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多