如何在 Objective C 而不是 swift 中调用 firebase 快照?

How do you call a firebase snapshot in Objective C instead of swift?

JSON
switch
  uid
    switch : true
  uid2
    switch : false

更新:以上是数据库结构,是我在Jay评论后添加的。

在swift我会做:

    let databaseRef = Database.database().reference().child("switch").child(self.postID)
databaseRef.queryOrdered(byChild: "switch").queryEqual(toValue: "true").observeSingleEvent(of: .value) { (snapshot) in               
 print(snapshot)
            if snapshot.exists() {
                print("Address is in DB")
              } else {
                print("Address doesn't exist")
              }
                }

但我必须使用 Objective C 因为我必须使用 Objective C 选择器

   @objc func didLongPress() {

 ///that snapshot
 }

    override func awakeFromNib() {
     super.awakeFromNib()
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(didLongPress))
            like.addGestureRecognizer(longPress)
    }

更新:可能的解决方案?

       let ref = Database.database().reference().child("switch").child(self.postID).child("switch")
    ref.observeSingleEvent(of:.value,  with: {snapshot in
         if snapshot.exists() {
            print("Got data \(snapshot.value!)") //will print true or false
            let ab = snapshot.value!
            if ab as! Int>0 {
                print("yes")
            } else {
                print("no")
            }
        }
        else {
            print("No data available")
        }
    })

问题出在查询上。这是问题的结构

JSON
switch
  uid
    switch : true
  uid2
    switch : false

并且正在使用的查询正在查询以下内容

your_database
   switch
      uid
         switch: true --> the query is running against this single child node <--
      uid2
         the query is NOT running here

如果您知道路径,确实没有理由 运行 针对单个 child 节点进行查询。如果目的是确定child是否存在,则根本不需要查询。直接读取节点,看是否存在

let ref = your_database.child("switch").child(self.postID).child("switch")
ref.observeSingleEvent...

并且如果 switch 存在任何值(true 或 false),它将在快照中返回。

编辑

如果您想知道 child 的值,它会在快照中(如果存在)。这是一些代码

let ref = your_database.child("switch").child(self.postID).child("switch")
ref.getData { (error, snapshot) in
    if let error = error {
        print("Error getting data \(error)")
    }
    else if snapshot.exists() {
        let myBool = snapshot.value as? Bool ?? false
        print("Got data \(myBool)") //will print true or false
    }
    else {
        print("No data available")
    }
}