使用Swift 3更新Firebase中的现有对象

时间:2016-11-30 12:54:42

标签: ios swift firebase firebase-realtime-database

我一直无法保存从Firebase中取出的对象。我想抓住' cardAmount'的价值,添加并保存。但它一直给我带来麻烦,因为它不是将数字转换为字符串。我想我可能会因修改数据结构而感到困惑,但我已经坚持了一段时间 - 有人能给我一些关于如何根据需要在Firebase中编辑单个儿童快照的指导吗?

let sevenDayOption = UIAlertAction(title: "Seven Day: $31", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        let query = ref.queryOrdered(byChild: (FIRAuth.auth()!.currentUser?.uid)!)
        query.observeSingleEvent(of: .value, with: { (snapshot) in
            let cardAmount = snapshot.childSnapshot(forPath: "cardAmount").value as! Float
            let newAmount = cardAmount + 31
            let newAmountString = String(format:"%.2f", newAmount)
            snapshot.setValue(newAmountString, forKeyPath: snapshot.childSnapshot(forPath: "cardAmount").value as! String)
            print(snapshot.childSnapshot(forPath: "cardAmount").value as! Float) /*<---- Prints Optional(30.5)*/

        })
    })

我确定它可能很简单,但它现在也让我感到不舒服。对于Firebase和Swift来说相对较新,所以它有时候会遇到一些挑战。

谢谢!

2 个答案:

答案 0 :(得分:1)

对于那些遇到此问题但未来遇到问题的人 - 答案来自Firebase提供的updateChildValues方法:

let sevenDayOption = UIAlertAction(title: "Seven Day: $31", style: .default, handler: {
        (alert: UIAlertAction!) -> Void in
        let query = ref.queryOrdered(byChild: (FIRAuth.auth()!.currentUser?.uid)!)
        query.observeSingleEvent(of: .value, with: { (snapshot) in
            let cardAmount = snapshot.childSnapshot(forPath: "cardAmount").value as! Float
            let newAmount = cardAmount + 31
            let newAmountString = String(format:"%.2f", newAmount)
            ref.updateChildValues(["cardAmount":newAmountString])/*<------ CRITICAL*/
        })
    })

非常感谢你!

答案 1 :(得分:0)

试试此代码

ref.child("yourKey").child("yourKey").updateChildValues(["cardAmount": yourNewCardAmount])

这对我有用。希望会帮助别人......