我正在尝试创建一个自定义的firebase数据库类,不断收到错误

时间:2017-10-23 00:00:51

标签: ios swift firebase firebase-realtime-database

我正在尝试创建自定义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
    }

}

1 个答案:

答案 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!
    }
}