SwiftUI 对接 Firebase 实现点赞功能时如何对点赞数进行加减操作
问题解决方案
你之前的写法是直接将likes字段赋值为1或-1,Firebase Firestore 提供了专门的原子增量接口FieldValue.increment(),可以直接实现数值的累加/扣减,且天然支持并发场景,不会出现多用户同时操作导致的计数错误。
修正后的完整代码如下:
func addLike(id: String){ ref.collection("Posts").document(id).updateData(["likes": FieldValue.increment(Int64(1))]) { (err) in if err != nil{ print(err!.localizedDescription) return } } } func unLike(id: String){ ref.collection("Posts").document(id).updateData(["likes": FieldValue.increment(Int64(-1))]) { (err) in if err != nil{ print(err!.localizedDescription) return } } }
注意事项
- 若编译器提示找不到
FieldValue,请确认你已经在当前文件头部导入了FirebaseFirestore库 - 建议在创建帖子的初始化逻辑中,就给
likes字段设置初始值为0,避免第一次执行增量操作时字段不存在导致的异常 - 该增量操作是原子操作,不需要先查询当前点赞数再做计算更新,既简化了代码也避免了并发冲突问题
内容的提问来源于stack exchange,提问作者BubH
相关产品推荐
相关产品推荐

