微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 在Firebase中增加数据点的最简单方法?

我在Firebase中增加一段数据时遇到了麻烦.

Firebase {
    clickedCounter: 0
}

这是我的代码

@IBAction func plus(sender: UIButton) {
        FIRDatabase.database().reference().child("clickedCounter").observeEventType(.Value) { (snap: FIRDataSnapshot) in
            let value = FIRDatabase.database().reference().child("clickedCounter") as? NSNumber
            let increment = ((value?.intValue)! + ((1 as? NSNumber)?.intValue)!) as? NSNumber
            FIRDatabase.database().reference().child("clickedCounter").setValue()
            self.clickLabel.text = snap.value?.description as String!
        }
    }

我也尝试过:

@IBAction func plus(sender: UIButton) {
        FIRDatabase.database().reference().child("clickedCounter").observeEventType(.Value) { (snap: FIRDataSnapshot) in
            FIRDatabase.database().reference().child("clickedCounter").setValue((snap.value?.description)! + 1)
            self.clickedLabel.text = snap.value?.description as! String!
        }
    }

我的第一个警告是:

从Int32转换为NSNumber总是失败

从NSNumber到NSNumber的条件演员总是成功的

从FIRDatabaseReference转换为NSNumber总是失败

在我运行它之后,我得到了关于let increment的错误….:线程1:EXC_BAD_INSTRUCTION

对于我的第二个错误是:

二进制运算符不能应用于String和Int类型的操作数

>当我认为我在Firebase中将其定义为Int时,我很困惑我的snap.value?.description是一个字符串.
>当事情总是成功时,为什么会收到警告?
>有更好的方法吗?

谢谢!

解决方法

为什么不(v2.x Firebase代码,但你明白了)

counterRef.observeSingleEventOfType(.Value,withBlock: { snapshot in
     let valString = snapshot.value
     var value = valString.intValue
     value = value + 1
     counterRef.setValue("\(value)")         
})

如果多个用户经常更新,也可以利用事务块.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐