Ios Firebase observeSingleEvent完成处理程序
我有一个FirebaseManager类和一个get data函数。 调用此函数时,我需要在调用它的位置获取此数据。 我正在尝试做一些类似的事情Ios Firebase observeSingleEvent完成处理程序,ios,swift,firebase-realtime-database,Ios,Swift,Firebase Realtime Database,我有一个FirebaseManager类和一个get data函数。 调用此函数时,我需要在调用它的位置获取此数据。 我正在尝试做一些类似的事情 import Firebase class FirebaseManager { var ref = Database.database().reference() func getData (path: String) -> DataSnapshot { self.ref.chil
import Firebase
class FirebaseManager {
var ref = Database.database().reference()
func getData (path: String) -> DataSnapshot {
self.ref.child(path).observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
print(snapshot.value!)
return snapshot // XCODE ERROR - Cannot convert return expression of type 'Void' to return type 'DataSnapshot'
} else {
print("No data by path \(path)")
}
}
}
}
正如标题所示,您需要一个完成处理程序。您可以将其作为参数传递给函数。它可能看起来像这样:
func getData(path: String, completion: @escaping (DataSnapshot) -> Void) {
self.ref.child(path).observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
completion(snapshot)
} else {
print("No data by path \(path)")
}
}
}
getData(path: "myPath") { snapshot in
//do something with snapshot here
}
//no access to snapshot here
然后,你可以这样称呼它:
func getData(path: String, completion: @escaping (DataSnapshot) -> Void) {
self.ref.child(path).observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
completion(snapshot)
} else {
print("No data by path \(path)")
}
}
}
getData(path: "myPath") { snapshot in
//do something with snapshot here
}
//no access to snapshot here
请注意,您可以访问闭包内的snapshot
({}
),因此在闭包后无法访问快照
就我个人而言,我可能会进行一些重构,以便从快照内部返回实际数据(如
字符串、字典,等等),而不是返回DataSnapshot
本身,但这是一个偏好问题。thnx很多,朋友!很高兴这有帮助。您可以通过单击绿色复选标记将答案标记为正确/接受。