【问题标题】:Updating a Counter to Firestore将计数器更新到 Firestore
【发布时间】:2021-04-04 21:35:27
【问题描述】:

我希望每次点击按钮时都有一个计数器

因此我有以下代码来创建按钮

 func configureButton() -> UIButton{
    button.setTitle("drink", for: .normal)
    button.setImage(#imageLiteral(resourceName: "beer-2288121_640").withRenderingMode(.alwaysOriginal), for: .normal)
    button.addTarget(self, action: #selector(handleDrinkButton), for: .touchUpInside)
    button.backgroundColor = .black
    button.imageView?.contentMode = .scaleAspectFill
    
    return button
}

我还有一个计数器的公共变量

var beer: Int?

我想获取数据并将其推送到 Firebase

  @objc func handleDrinkButton() {
    
   var db = Firestore.firestore()
   
    let userID = Auth.auth().currentUser?.uid
   
    self.beer =  db.collection("users").document(userID!).collection("beer") as! Int
      
        self.beer! += 1
        
        Firestore.firestore().collection("users").document(userID!).updateData(["beer": self.beer])

      // ...
      }){ (error) in
        print(error.localizedDescription)
    }
}

但数据不会改变。

不知道是我增加数字false还是读写数据的方式不对。

【问题讨论】:

  • 您的代码正在读取实时数据库,然后写入 Cloud Firestore。这是故意的吗?
  • 谢谢,我已经编辑了 Firestore 的评论
  • 但我认为将用户数据分配给整数是错误的方法。我收到以下错误消息:无法将“CollectionReference”类型的值分配给“Int”
  • 也许像 self.beer = dbRef.collection("beer") 一样?诠释?? 0 自我啤酒! += 1

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

您集合中的beer 不是集合,而是文档中的一个字段。

如果您想增加该字段的值,Firestore 有一个内置的increment 操作,可以让这变得更容易:

db.collection("users").document(userID!).updateData([
    "beer": FieldValue.increment(Int64(1))
])

另见:

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2019-11-01
    • 2023-01-27
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多