我正在尝试创建自定义firebase数据库类。我试图使用observeSingleEvent函数从数据库中提取数据并将其分配给变量并返回该变量。问题是我发生错误“致命错误:在解开一个Optional值时意外发现nil”但我知道我的代码有效,因为我在该类之外使用它。下面我宣布我的类变量和我称之为的地方。
class MainMenuController: UIViewController {
var db: DataBase!
func readCheckings() {
self.checkAmLbl.text = db.readMonth()!
}
}
这是我的DataBase类:
class DataBase {
private var ref: DatabaseReference {
return Database.database().reference()
}
var uid: String? = (Auth.auth().currentUser?.uid)!
func readMonth() -> String? {
var check: String? = ""
self.ref.child("Account Data").child(uid!).child("November 2017").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as! NSDictionary
let checkings = value["Checkings"] as! Double
check = String(checkings)
})
return check
}
}
答案 0 :(得分:0)
错误发生在readMonth()
方法设计中。在返回check
值之前,您需要等待以完成Firebase。
请改为尝试:
func readMonth(completion: @escaping (String?) -> Void) {
self.ref.child("Account Data").child(uid!).child("November 2017").observeSingleEvent(of: .value) {
(snapshot) in
let value = snapshot.value as! NSDictionary
let checkings = value["Checkings"] as! Double
let check = String(checkings)
completion(check)
}
}
然后这样称呼:
func readCheckings() {
db.readMonth { (check) in
self.checkAmLbl.text = check!
}
}