我想在另一个函数中使用 variable_a 。实际上,我想将这些数据加载到tableviewcell中。
func readFIRData() {
var credentials:[String]
let userID = Auth.auth().currentUser?.uid
ref = Database.database().reference().child("usr").child(userID!)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let Name = value?["firstName"] as? String ?? ""
let PhoneNo = value?["mobile"] as? String ?? ""
var variable_a = [Name,PhoneNo]
self.tableView.reloadData()
}) { (error) in
}
}
答案 0 :(得分:0)
你应该在readFIRData
函数中有一个回调(完成处理程序),并将 variable_a 作为该回调中的参数传递。将其解析为在表视图中使用的对象,并在回调中重新加载tableView。
功能应如下所示:
func readFIRData(_ completion: ([Name,PhoneNo]) -> ()) {
var credentials:[String]
let userID = Auth.auth().currentUser?.uid
ref = Database.database().reference().child("usr").child(userID!)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let Name = value?["firstName"] as? String ?? ""
let PhoneNo = value?["mobile"] as? String ?? ""
var variable_a = [Name,PhoneNo]
completion(variable_a)
}) { (error) in
}
}
然后有另一个函数调用readFIRData
函数:
func requestData() {
readFIRData() { [weak self] data in
guard let `self` = self else { return }
self.data = data
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
提及如何返回主线程以重新加载tableView。通过self.data,我假设您将在表视图中使用的数据来实例化单元格。
答案 1 :(得分:0)
解决这个问题
func GetData(completion: @escaping(_ credentials: [String]) -> Void) {
let userID = Auth.auth().currentUser?.uid
ref = Database.database().reference().child("usr").child(userID!)
ref.observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let Name = value?["firstName"] as? String ?? ""
let PhoneNo = value?["mobile"] as? String ?? ""
var variable_a = [Name,PhoneNo]
completion(variable_a)
self.tableView.reloadData()
}) { (error) in
}
}
现在,将 StringArray 分配给某个变量。使用下面的代码进行分配。同样,变量 StringArrayVariable 可用于填充tableview单元格。
GetData { (StringArray) in
self.StringArrayVariable= StringArray
}