我讀了一些關於這個問題。但我仍然有異步功能的問題。異步函數和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(){ 打印( 「數據檢索」) }' –
我是否正確地使用它? –