Swift - 将Firebase快照转换为变量

时间:2016-05-26 19:57:55

标签: swift variables firebase firebase-realtime-database

所以我尝试使用从我的firebase数据库中获取的快照来更改变量的内容。

我已定义变量,然后尝试使用setValue方法将本地存储变量的值更改为数据库中保存的值。尽管没有出现任何错误,但我的功能并没有按原样运行 - 尽管我的变量显然是' 0,但没有任何内容添加到数据库中。

这是我的代码:

    var myVar = 1 as AnyObject

    currentUserHasVotedVar.observeSingleEventOfType(.Value, withBlock: { snapshot in
        myVar = snapshot.value
        print(myVar)
//should be set to '0' from db
        }, withCancelBlock: { error in
            print(error.description)
    })

    if myVar as! NSObject == 0 {
        print("Hasn't voted yet")
        pollRef.childByAppendingPath("leave").childByAutoId()
        myVar = 1
        print(myVar)
    }

1 个答案:

答案 0 :(得分:1)

在这种情况下,“myVar”将始终为1,因为Value类型的单个事件是异步的。所以执行顺序是第一个:

var myVar = 1 as AnyObject

然后..

if myVar as! NSObject == 0 {
 print("Hasn't voted yet")
 pollRef.childByAppendingPath("leave").childByAutoId()
 myVar = 1
 print(myVar)
}

(此代码永远不会执行,因为myVar始终为1),最后它会执行回调的内容...

{ snapshot in
  myVar = snapshot.value
  print(myVar)
}, withCancelBlock: { error in
  print(error.description)
}

为了在“currentUserHasVotedVar”引用中访问firebase路径的值,您必须将验证代码放在回调中。