2016-12-27 42 views
2

所以我一直在寻找,有很多人在做Firebase交易,他们都不一样。我想要做的只是将1加到柜台上,而iv完美地工作,但我想检查一下我是否正确地做,因为我的方式比他们的文档简单得多。Firebase交易 - 这是正确的吗?

干杯提前! :)

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() 
     }) 

回答

3

这对我来说看起来不错,只要你对逻辑满意。

您目前的逻辑只是一个更新 - 如果没有现有的帖子,您将中止交易(currentData.value将为空)。

您从likeCount中删除1,而不是像您在说明中提到的那样添加1。

你当然可以使用这个版本,但是你可能想要实现runTransaction:andCompletionBlock,它可以让你记录错误,特别是在调试/测试时。

+0

谢谢!是的,这是我发布的不同逻辑,哎呀!当文章被创建时,它将默认值counter设置为0,这样它就不会中止事务。我确实看到有一个我可以使用的完成块,但如果我需要它,我仍然在折腾!但是谢谢你! – Eli