因此,我一直在环顾四周,有很多人在做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 ,它可以记录错误,尤其是在调试/测试时。

10-05 23:35