从firebase中检索金额值,使用swift 3进行减法和更新

时间:2017-08-24 14:44:30

标签: ios swift firebase firebase-realtime-database

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

数据结构

Data Structure

当我使用[AnyHashable: Any]取消注释该行时,该应用在此行崩溃:

let newCredit = credit as! Int

但是当我用[AnyHashable: Any]注释掉这一行时,我收到错误:

ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString)

错误说:

  

无法将String类型的值转换为预期的参数类型[AnyHashable:Any]

请您指出我如何解决这个问题的正确方向?

1 个答案:

答案 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)
}