Swift 3 + Firebase:检查数组内的值是不是存在?

Posted

技术标签:

【中文标题】Swift 3 + Firebase:检查数组内的值是不是存在?【英文标题】:Swift 3 + Firebase: Check if value inside array exists?Swift 3 + Firebase:检查数组内的值是否存在? 【发布时间】:2017-03-22 20:37:47 【问题描述】:

我有一个帖子节点,其中包含我的 FB 数据库中的各个帖子。这些帖子每个都有一个users_liked 数组,其中有一个随机生成的键,值是当前用户uid。我的问题是我希望能够检查该数组中是否已经存在该值(uid),如果存在,请执行某些操作;否则做别的事

我如何实现这一目标?我的 JSON 树在下面。谢谢你。

【问题讨论】:

Firebase 无法检查特定值是否存在。如果您需要这个,通常意味着您应该反转 users_liked 并使用 UID 作为密钥。见youtu.be/66lDSYtyils?t=6m17s 和***.com/questions/39149216/… 【参考方案1】:

只需请求该路径的快照并使用.exists()。

var postid = "-KGNY..."
var uid = FIRAuth.auth()?.currentUser?.uid
var ref = FIRDatabase.database().reference()

ref.child("posts").child(postid).child("users_liked").child(uid!)
   .observeSingleEvent(of: .value, with:  (snapshot) in
  // Get user value
  if snapshot.exists() == true 
     print("exists")
  
  else 
     print("does not exist")
  
)  (error) in
    print(error.localizedDescription)

(原谅我残暴的 Swift 语法;这不是我说的语言)

【讨论】:

【参考方案2】:

我正在为你写一些代码,然后我意识到你想要 Swift,我使用 Java :S 无论如何,概念大纲应该足够了。创建对“users_liked”节点的 Firebase 数据库引用,并将单个事件值侦听器设置为此引用。接下来,将 datasnapshot 传递给“foreach”循环 swift 等效项,为 datasnapshot 的每个子项(datasnapshot.getChildren())创建一个新的 datasnapshot,“dsChild”。最后通过执行 dsChild.getValue 并利用 equalTo() 检查每个项目是否存在值。希望这会有所帮助,对不起,我不能用 Swift 写出来!

【讨论】:

以上是关于Swift 3 + Firebase:检查数组内的值是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Swift 3 完成处理程序 Bool

Swift 3 中的 UIPickerView 和子类数组

Swift - 我如何检查 firebase 服务器是不是可用?

检查用户名是不是已经存在:Swift、Firebase

使用swift 3如何从firebase中检索另一个数据中的数据[关闭]

如何检查 Firebase 数据库中的唯一用户名(swift)