我有一个基本上是一个计算器的应用程序,用户可以将自己从某些游戏中赢得的总金额加起来。当我输入的数字不是整数时,例如“ $ 1.25”,它在firebase上保存为“ $ 1.25”,但是当我关闭应用程序并重新打开时,该值将重置为$ 0.00,但在firebase上存储为$ 1.25”。 如果我用整数做同样的事情-例如“ $ 1”,然后关闭应用程序并打开,则“ $ 1”将保留在应用程序上。
//add local data
let gameKey = gameNames[addWinningsView.tag]
let newValue = amountList[addWinningsView.tag] + (Double(addWinningsAmount.text!) ?? 0)
UserDefaults.standard.set(newValue, forKey: gameKey)
UserDefaults.standard.synchronize()
//Update UI
loadTotalAmount()
//update to firebase
let uuid = UIDevice.current.identifierForVendor!.uuidString
let ref = Database.database().reference().child("app_data/user_total_won/\(uuid)/\(gameKey)")
ref.setValue(newValue)
从Firebase加载数据的代码
//Load winning points
let uuid = UIDevice.current.identifierForVendor!.uuidString
Database.database().reference().child("app_data/user_total_won/\(uuid)").observeSingleEvent(of: .value, with: {(snapshot) in
let dict = snapshot.value as? [String : AnyObject] ?? [:]
for game in gameNames {
let amount = dict[game] as? Int ?? 0
UserDefaults.standard.set(amount, forKey: game)
UserDefaults.standard.synchronize()
}
self.loadTotalAmount()
}
预期结果:从Firebase检索的数据不仅仅是整数。
答案 0 :(得分:1)
从Firebase检索值时,可选地将其强制转换为as? Double
而不是Int
,这样您就不会只获取整数。
要解决此问题,如果您要将金额保存为let amount = dict[game] as? Int ?? 0
在Firestore中,请将let amount = dict[game] as? Double ?? 0
更改为Double
。