如何在 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")
}
}
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")
}
}