Ios 正在swift中从firebase读取数据,但无法显示数据。可能是可变范围错误
`Ios 正在swift中从firebase读取数据,但无法显示数据。可能是可变范围错误,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,` 正在Swift中从firebase读取数据,但无法显示数据。可能是可变范围错误。打印输出(值?[“名称”]为?字符串???”是预期结果,但未分配给self.name变量。我相信这是一个范围错误,但我还不确定。非常感谢所有帮助,因为我对iOS和Swift比较陌生。因为从Firebase接收数据是一项异步任务,所以不能这样做。您必须为此使用完成处理程序 首先添加完成处理程序作为函数的参数,也不需要返回类型 import UIKit import FirebaseDatabase import F
正在Swift中从firebase读取数据,但无法显示数据。可能是可变范围错误。打印输出(值?[“名称”]为?字符串???”是预期结果,但未分配给self.name变量。我相信这是一个范围错误,但我还不确定。非常感谢所有帮助,因为我对iOS和Swift比较陌生。因为从Firebase接收数据是一项异步任务,所以不能这样做。您必须为此使用完成处理程序 首先添加完成处理程序作为函数的参数,也不需要返回类型
import UIKit
import FirebaseDatabase
import FirebaseAuth
class mapVC: UIViewController {
var name:String = ""
var number:String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated:true);
var dict = fetchData()
print(dict)
}
func fetchData()->[String:String]{
var ref: DatabaseReference!
ref = Database.database().reference()
var uid:String=""
var email:String=""
let user = Auth.auth().currentUser
if let user = user {
let uid_local = user.uid
let email_local = user.email
uid=uid_local
email=email_local!
}
ref.child("Users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
self.name = value?["name"] as? String ?? ""
print(value?["name"] as? String ?? "")
self.number = value?["number"] as? String ?? ""
print(value?["number"] as? String ?? "")
})
return(["Name":name,"Number":number,"Email":email,"UID":uid]);
}
}
然后在收到数据时调用completion
func fetchData(_ completion: @escaping ([String:String]) -> ())
现在,您可以通过关闭fetchData
函数从Firebase访问数据
ref.child("Users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
...
completion(["Name":name,"Number":number,"Email":email,"UID":uid])
})
注意:从Firebase接收数据之前,您不会有这些数据,因此需要一些时间因为从Firebase接收数据是一项异步任务,您不能这样做。您必须为此使用完成处理程序 首先添加完成处理程序作为函数的参数,也不需要返回类型
import UIKit
import FirebaseDatabase
import FirebaseAuth
class mapVC: UIViewController {
var name:String = ""
var number:String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated:true);
var dict = fetchData()
print(dict)
}
func fetchData()->[String:String]{
var ref: DatabaseReference!
ref = Database.database().reference()
var uid:String=""
var email:String=""
let user = Auth.auth().currentUser
if let user = user {
let uid_local = user.uid
let email_local = user.email
uid=uid_local
email=email_local!
}
ref.child("Users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
self.name = value?["name"] as? String ?? ""
print(value?["name"] as? String ?? "")
self.number = value?["number"] as? String ?? ""
print(value?["number"] as? String ?? "")
})
return(["Name":name,"Number":number,"Email":email,"UID":uid]);
}
}
然后在收到数据时调用completion
func fetchData(_ completion: @escaping ([String:String]) -> ())
现在,您可以通过关闭fetchData
函数从Firebase访问数据
ref.child("Users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
...
completion(["Name":name,"Number":number,"Email":email,"UID":uid])
})
注意:从Firebase接收数据之前,您不会有这些数据,因此需要一些时间您是指这样的事情吗?您是指这样的事情吗-