【发布时间】:2020-12-04 02:43:08
【问题描述】:
我声明了一个 var,我可以从 Firebase 数据库中检索该值,但是当我在 ViewDidLoad 中打印该 var 时,它是空的,我不明白出了什么问题。感谢大家 这是我打印 var 时得到的答案:这是语言
//
var language: String = ""
//
func getUserLanguage(completion:((String) -> Void)?) {
let ref = Database.database().reference()
let uid = Auth.auth().currentUser!.uid
ref.child("users").child(uid).observe(.value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let languageResult = value?["language"] as? String ?? ""
completion?(languageResult)
}
)}
//
getUserLanguage { (languageResult) in
self.language = languageResult
}
// I print the value in ViewDidload
print("this is the language\(self.language)")
【问题讨论】:
-
当解包失败时,当你用
value?["language"] as? String ?? ""分配空字符串时,你怎么会得到零?并尝试使用[String: Any]而不是NSDictionary并检查快照是否实际返回该值。 -
快照返回值但只在函数内部,当我在这个函数以外的任何地方调用var时,它是= nil
-
var language: String = ""不是可选的。您永远无法将其值设为nil。如果您在viewDidLoad中调用getUserLanguage并尝试在调用完成之前访问它,您将得到一个空字符串。您可以添加有问题的快照值吗? -
对不起,我不明白我应该做什么,快照值应该是“英语”
-
您能否在您的问题中添加打印的快照值?
标签: swift database firebase var