我正在使用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)
错误提示:
无法将字符串类型的值转换为预期的参数类型[AnyHashable:Any]
您能为我指出如何解决这个问题的正确方向吗?
最佳答案
let newCredit = credit as! Int
行应该总是让您出错。您不能将Dictionary类型转换为Int类型。要将积分作为Int检索,您可以这样做:
if let newCredit = Int(cred) {
let bal = newCredit - 1
}
由于您的
cred
值作为Int检索,因此无需指定%.2f
类型另外,您可以像下面这样直接创建Dictionary(使用“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)
}
关于ios - 从Firebase检索金额值进行减法并使用Swift 3更新金额,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45864603/