【发布时间】:2017-04-11 20:51:09
【问题描述】:
func observeActiveTrackingState() -> String{
let pathToObserveState = databaseRef.child("locationState").child("\(userID!)")
pathToObserveState.observeSingleEvent(of: .value, with: { (snapshot) in
let snapshotValue = snapshot.value as? NSDictionary
print("Snapshot Returned (ObserveActiveTrackingState) = \(snapshotValue?["state"] as! String)")
let currentState = snapshotValue?["state"] as! String
return currentState //*****GIVES ME AN ERROR*****
})
//IF I PUT THE RETURN HERE HOW DO I CALL THE CURRENTSTATE VARIABLE
}
我有一个名为“observeActiveTrackingState”的函数,它应该返回一个字符串,通常在添加返回时它会返回我想要的字符串变量,但是因为我需要将返回语句放在下面
pathToObserveState.observeSingleEvent(of: .value, with: { (snapshot) in
})
它返回一个错误并说它需要在 firebase 的完成块之外发生。如何修复此代码,以便在调用函数时获得所需的变量
【问题讨论】:
-
你根本不能这样做。您正在尝试使用异步方法的结果从同步方法返回。它不起作用。
-
@Fogmeister 有什么办法可以解决这个问题?
-
这个问题在堆栈溢出时已经被问过很多次了。这就是为什么我将其标记为重复。谷歌问题。你会得到答案的。
-
这不是 Firebase 的工作方式。您(通常)将希望在闭包内使用快照中返回的数据,这是它唯一有效的时间。避免添加回调和其他完成处理程序,因为它可能会产生其他问题。请参阅我对This question 的回答,因为它可能会提供一些见解。
标签: ios swift firebase swift3 firebase-realtime-database