2016-12-27 61 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