因此,我一直在环顾四周,有很多人在做Firebase交易,而且他们都是不同的。我要做的只是将1加到一个计数器上,iv得到的效果很好,但是我想检查一下我做得是否正确,因为我的方法比他们的文档简单得多。
干杯是前进的! :)
database.child("stories").child(articleKey).runTransactionBlock({ (currentData:FIRMutableData) -> FIRTransactionResult in
if var post = currentData.value as? [String: AnyObject] {
var likeCount = post["storyLikes"] as? Int ?? 0
likeCount += 1
post["storyLikes"] = likeCount as AnyObject?
currentData.value = post
return FIRTransactionResult.success(withValue: currentData)
}
//Abort like if there was a problem
return FIRTransactionResult.abort()
})
最佳答案
只要您对逻辑感到满意,这对我来说就很好。
您当前的逻辑只是一个更新-如果没有现有的帖子,您将中止交易(currentData.value
将为null)。
您从likeCount
中删除了1,而不是像描述中提到的那样添加。
您拥有的版本肯定可以使用,但是您可能想要实现 runTransaction:andCompletionBlock
,它可以记录错误,尤其是在调试/测试时。