当前位置:  开发笔记 > IOS > 正文

如何使用Firebase存储喜欢的内容

如何解决《如何使用Firebase存储喜欢的内容》经验,为你挑选了2个好方法。

我有一个关于firebase的后端,有像Facebook这样的帖子.所以我需要喜欢这些帖子的功能.问题是如何存储喜欢帖子的喜欢和用户?所有帮助将不胜感激



1> David East..:

采用这种数据结构:

{
   "posts": {
      "post_1": {
         "uid": "user_1",
         "title": "Cool Post"
      },
      "post_2": {
         "uid": "user_1",
         "title": "Another Cool Post"
      },
      "post_3": {
         "uid": "user_2",
         "title": "My Cool Post"
      }
   },
   "postLikes": {
      "user_1": {
         "post_3": true
      },
      "user_2": {
         "post_1": true,
         "post_2": true         
      }
   }
}

该位置/posts检索所有帖子.该位置/postLikes检索帖子上的所有喜欢.

所以,让我们说你是user_1.要获得帖子user_1,您可以编写此Firebase数据库侦听器:

let ref = Firebase(url: "")
let uid = "user_1"
let userRef = ref.childByAppendingPath(uid)
userRef.observeEventType(.Value) { (snap: FDataSnapshot!) in
  print(snap.value) // prints all of the likes

  // loop through each like
  for child in snap.children {
    let childSnap = child as! FDataSnapshot
    print(childSnap.value) // print a single like
  }
}

这里需要注意的重要一点是数据结构的"平坦性".postLikes没有存储在每个post.这意味着您可以在post不获取所有喜欢的情况下检索.但是,如果你想同时获得两者,你仍然可以这样做,因为你知道用户的id.

尝试提供有关结构化数据的Firebase指南



2> gk103..:

要添加到david的答案中的评论,上面(我还不能添加评论)来获取喜欢的计数,你想要使用交易数据.

在你的firebase中,你想设置一个"喜欢"的孩子,在post节点看起来像这样:

{
   "posts": {
      "post_1": {
         "uid": "user_1",
         "title": "Cool Post"
         "likes": 0
      },
      "post_2": {
         "uid": "user_1",
         "title": "Another Cool Post"
         "likes": 0
      },
      "post_3": {
         "uid": "user_2",
         "title": "My Cool Post"
         "likes": 0
      }

Xcode中的代码看起来类似于下面的代码.每次收到帖子时你都会添加一个计数器(相同的代码,但使用" - 1"不同).

self.databaseRef.child("posts").child("post_1").child("likes").runTransactionBlock({
         (currentData:FIRMutableData!) in
         var value = currentData.value as? Int
                               //check to see if the likes node exists, if not give value of 0.
                                if (value == nil) {
                                    value = 0
                                }
                                currentData.value = value! + 1
                                return FIRTransactionResult.successWithValue(currentData)

                            })

希望这有助于某人!

这种计数器的附加读物:

Swift中的Upvote/Downvote系统通过Firebase

追随者计数器不更新firebase中的节点

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有