我正在使用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!"
    }
}

数据结构

ios - 从Firebase检索金额值进行减法并使用Swift 3更新金额-LMLPHP

当我用[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/

10-13 06:34