我读了一些关于这个问题。但我仍然有异步功能的问题。异步函数和Firebase与Swift 3
例如:我有一个viewController1
其中一个按钮执行SEGUE到viewController2
。在viewController2
类中,我初始化另一个名为exampleClass
的类文件中的一些值。这些值是从Firebase数据库或位置值中检索的。这些值需要一点时间来检索。我将exampleClass
的值返回到我的viewController2
。我在viewController2
viewDidLoad()
中打印这些值。
我的问题:设备不会等待检索值并执行以下功能。结果:当我触摸按钮时,打印值为nil
值。如果我不确保代码安全,它也可能导致应用程序崩溃。
我到目前为止已经发现:我才知道,我只有在火力地堡snapshot
(例如)这样的结尾调用FUNC:
userRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in
self.name = snapshot.value as! String!
print(self.name)
self.forceEnd()
}) { (error) in
print(error.localizedDescription)
}
我命名这个功能forceEnd
要清楚。这不适合我。我也尝试创建处理程序,但没有积极的结果。
我的问题:如何强制设备在执行以下问题之前等待检索值?
这是行不通的。这里是我的func:'func initUserName(finished:@escaping() - > Void)let userRef = ref.child(“users”)。child((user?.uid)!)。child(“name”) userRef.observeSingleEvent(作者:.value的,有:{(快照) - >虚空中 让名:字符串= snapshot.value作为字符串 self.name =名称 完成() }){(错误)在 打印(error.localizedDescription) } }' –
像这样来使用:'mainUser()initUserName(){ 打印( “数据检索”) }' –
我是否正确地使用它? –