我正在尝试从 firebase 获取数据并将其用作我创建的模型。
这是我的模型;
class UserData{
var nickname : String = ""
var onesignal_player_id : String = ""
var step_count : Int = 0
var total_point : Int = 0
var competitions : [String:Competition] = [String:Competition]()
}
class Competition{
var end_date : String = ""
var gift : String = ""
var id: String = ""
var name: String = ""
var users : [String:Int] = [:]
}
这是我的职责;
func getFirebaseData() {
ref = Database.database().reference()
ref.child("users").child("HXXNCXf6RRS4WVO12shZ3j15BnG3").observe(.value) { (snapshot) in
if let snapshotValue = snapshot.value as? Dictionary<String,Any> {
//change userData with the snapshotValue
self.userData.nickname = snapshotValue["nickname"] as! String
self.userData.step_count = snapshotValue["step_count"] as! Int
self.userData.total_point = snapshotValue["total_point"] as! Int
self.userData.onesignal_player_id = snapshotValue["onesignal_player_id"] as! String
self.userData.competitions = snapshotValue["competitions"] as! [String:Competition]
//reload UI with userData
print(self.userData.competitions)
} else {
print("An error occured while assigning snapshotValue to userData")
}
}
}
这段代码给了我这样的错误;
无法将类型“__NSDictionaryM”(0x1f47ada20)的值转换为“StepCounterApp.Competition”(0x1004c06f0)。2021-01-02 23:05:49.985711+0300 StepCounterApp[32511:3685645] 无法将“__NSDictionaryM”(0x1f47ada20)类型的值转换为“StepCounterApp.Competition”(0x1004c06f0)。
但是当我注释掉函数中包含的行时self.userData.competitions
,getFirebaseData
一切正常。
我应该怎么办?如何使用 Firebase 数据作为模型?
最后这是我的火力基础数据;