【问题标题】:I am trying to create a custom firebase database class keep getting errors我正在尝试创建一个自定义的 firebase 数据库类不断收到错误
【发布时间】:2017-10-23 00:00:51
【问题描述】:

我正在尝试创建一个自定义 firebase 数据库类。我正在尝试使用 observeSingleEvent 函数从数据库中提取数据并将其分配给一个变量并返回该变量。问题是我将出现错误“致命错误:在展开可选值时意外发现 nil”,但我知道我的代码有效,因为我在该类之外使用它。这里是我声明我的类变量和调用它的地方。

class MainMenuController: UIViewController {
    var db: DataBase!

    func readCheckings() {
        self.checkAmLbl.text = db.readMonth()!
    }
}

这是我的数据库类:

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
    }

}

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    错误在于readMonth() 方法设计。您需要等待让 Firebase 完成,然后再返回您的 check 值。

    试试这个:

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

    【讨论】:

    • 抱歉,您还需要创建对象。将var db: DataBase! 替换为var db = DataBase()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多