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

Ios 如何使用Firebase存储喜欢的内容,ios,swift,firebase,Ios,Swift,Firebase,我在firebase上有一个后端,在Facebook上也有类似post的东西。所以我需要喜欢这些帖子的功能。问题是如何存储喜欢的内容和喜欢该帖子的用户? 非常感谢所有帮助采用以下数据结构: { "posts": { "post_1": { "uid": "user_1", "title": "Cool Post" }, "post_2": { "uid": "user_1", "ti

我在firebase上有一个后端,在Facebook上也有类似post的东西。所以我需要喜欢这些帖子的功能。问题是如何存储喜欢的内容和喜欢该帖子的用户?
非常感谢所有帮助

采用以下数据结构:

{
   "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
检索帖子上的所有likes

假设您是
user\u 1
。要获得用户1喜欢的帖子,您可以编写以下Firebase数据库侦听器:

let ref = Firebase(url: "<my-firebase-app>")
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
  }
}
let ref=Firebase(url:)
让uid=“user\u 1”
让userRef=ref.childByAppendingPath(uid)
中的userRef.observeEventType(.Value){(snap:FDataSnapshot!)
print(snap.value)//打印所有类似的内容
//循环通过每一个
为了孩子们{
让childSnap=child as!FDataSnapshot
print(childSnap.value)//打印单个like
}
}
这里需要注意的是数据结构的“平坦性”。
postLikes
不存储在每个
post
下。这意味着您可以检索
帖子
,而不必获取所有喜欢的内容。但是,如果您想同时获得这两个,您仍然可以这样做,因为您知道用户的id


要添加到上面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”表示不同)

希望这对别人有帮助

此类计数器的附加读数:


我认为存储like的最好方法是创建一个数组变量…然后推送它们的uid。。。 如果他们只是拿出他们的液体。。。数组的大小将是喜欢的数量。这样你就不会有重复的

 "post_1": {
     "uid": "user_1",
     "title": "Cool Post"
     "likes": []
  }

post_1.likes.push(user.uid)

@luk2302我只想知道它在理论上是怎样的。我不需要代码同样的逻辑适用于“理论”问题:你自己想出了什么想法和概念?@luke2302每篇文章都有一个字段,我可以将喜欢的东西存储为objects@luke2302我认为有更好的方法可以做到这一点,请将其编辑到您的问题中,以便每个人都能轻松地看到它-我个人不知道firebase,只是试图改进您的问题,以便您获得有用答案的机会更高。谢谢您,大卫。还有一个问题,如何获取喜欢的帖子数量?通过快照,您可以访问
snap.childrenCount
。然而,这只是下载的所有数据的计数。没有办法只返回计数。不确定,这对我来说真的很难:)。在你的回答中,我可以储存喜欢的内容,但无法计算该帖子被喜欢了多少次。或者我不明白,你也可以在每个帖子里写一个“likeCount”。当客户“喜欢”一篇文章时,您可以在客户端增加该值,并将其推回到文章中。但一定要处理好比赛条件。@DavidEast你好,David。如果我使用你的扇出技术。我应该在服务器端的每篇文章中存储喜欢数,并在每篇文章中存储喜欢更新喜欢数吗?还是最好将其存储为另一个节点?对于每个post,从这个节点得到的喜欢数是多少?您给定的代码允许用户多点喜欢:)是--向下投票/不同运行类似的代码,但currentData.value=value!-1.
 "post_1": {
     "uid": "user_1",
     "title": "Cool Post"
     "likes": []
  }