我使用函数从Firebase返回一个值,我在一个名为DBProvider
的类中执行此操作,最终,我尝试做的是从中检索值(纬度) Firebase并在函数(getUsersLatitude()
)中返回它。我试图做的是在函数中声明一个变量并将其设置为从Firebase检索的值(如下所示):
class DBProvider {
static let _instance = DBProvider()
//private init() {}
static var Instance: DBProvider {
return _instance
}
var dbRef: FIRDatabaseReference {
return FIRDatabase.database().reference()
}
let ref = FIRDatabase.database().reference()
func getUsersLatitude() -> CLLocationDegrees{
var latitude = CLLocationDegrees()
ref.child("users").child(FIRAuth.auth()!.currentUser!.uid).child("location").observeSingleEvent(of: .value, with: { (snapshot) in
if let loc = snapshot.value as? [String : AnyObject]{
if let lat = loc["latitude"]{
latitude = lat as! CLLocationDegrees
print("LATITUDE - \(latitude)")
}
}
})
ref.removeAllObservers()
print("OUTSIDE LATITUDE - \(latitude)")
return latitude
}
}
我在另一个名为PostViewController
的类中调用此函数,如下所示:
override func viewDidLoad() {
if FIRAuth.auth()?.currentUser != nil{
DBProvider.Instance.getUsersLatitude()
}
}
虽然我遇到的问题是它没有返回latitude
,但它返回0.0
。我知道这是因为印刷语句 - print("LATITUDE - \(latitude)")
,这是ref .....里面的一个,带有正确的纬度,55.633348
。
然而,print("OUTSIDE LATITUDE - \(latitude)")
,这是一个外部参考...,没有正确的纬度,0.0
。
如果过滤单词" LATITUDE"在调试器中,这是我得到的输出:
非常感谢任何帮助,谢谢!