我正在使用swift 3和firebase来构建应用程序,我想从数据库中检索一个数量进行减法,然后再次更新firebase上的数量。我有一个函数,你将在下面看到我的firebase数据结构。
功能:
func updateBal(cred: String){
//creating artist with the new given values
if ( cred != "" ) {
let credit = ["credits": cred]
let newCredit = credit as! Int
let bal = newCredit - 1
//let newBalanceString: [AnyHashable: Any] = [:]
//let newBalanceString: [AnyHashable: Any] = [AnyHashable(bal): "/(bal)"]
let newBalanceString = String(format:"%.2f", bal)
ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString)
//displaying message
//LabelMessage.text = "Balance Updated!"
}
}
数据结构
当我使用[AnyHashable: Any]
取消注释该行时,该应用在此行崩溃:
let newCredit = credit as! Int
但是当我用[AnyHashable: Any]
注释掉这一行时,我收到错误:
ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString)
错误说:
无法将String类型的值转换为预期的参数类型[AnyHashable:Any]
请您指出我如何解决这个问题的正确方向?
答案 0 :(得分:0)
行let newCredit = credit as! Int
应始终为您提供错误。您不能将Dictionary类型转换为Int类型。要将积分作为Int检索,您可以这样做:
if let newCredit = Int(cred) {
let bal = newCredit - 1
}
由于您的cred
值是作为Int检索的,因此无需指定类型%.2f
此外,您可以直接创建您的词典,如下所示(以“credits”字符串作为键,因为它总是这个值):
if let newCredit = Int(cred) {
let bal = newCredit - 1
let newBalanceString = ["credits" : bal]
ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString)
}