我有一个视图控制器,我想在其中进行firebase拉动,然后我想将数据从firebase pull推送到一个“DataController”,它转换数据使其适合UITableViewDelegate。问题是有四个DataController,一个分段控件选择使用它们中的哪一个。
如何使firebase函数首先在ViewDidLoad()中运行,我可以将值传递给DataController。
相关的代码行如下:
class ViewController: UIViewController {
var contactData: ContactData!
private var dataControllers: [DataController] = [
DataController1(data:contactData),
// this is where am setting the DataController init data currently, but I have to let firebase run first
DataController2(),
DataController3(),
DataController4()
]
private var segment: Segment = .profile {
didSet {
let dataController = self.dataControllers[self.segment.rawValue]
self.tableView.dataSource = dataController
self.tableView.delegate = dataController
self.tableView.reloadData()
}
}
self.tableView.dataSource = dataController
self.tableView.delegate = dataController
override func viewDidLoad() {
super.viewDidLoad()
FirebaseAPI.shared.getData(contactID: contact.contactID) { [weak self] result in
DispatchQueue.main.async {
switch result {
case .success(let result):
self?.contactData = result
case .failure(let error):
print(error)
}
}
}
//.....
}
我如何将contactData提供给DataController(数据:ContactData)?现在,firebase代码在ViewDidLoad()中最后运行。
对不起基本问题,我还在学习Swift和Firebase。
你为什么不在回调中创造那个DataController
?
class ViewController: UIViewController {
var contactData: ContactData!
var dataController : DataController?
// this is where am setting the DataController init data currently, but I have to let firebase run first
override func viewDidLoad() {
super.viewDidLoad()
FirebaseAPI.shared.getData(contactID: contact.contactID) { [weak self] result in
DispatchQueue.main.async {
switch result {
case .success(let result):
dataController = DataController(data: result)
self.tableView.dataSource = dataController
self.tableView.delegate = dataController
self.tableView.reloadData();
case .failure(let error):
print(error)
}
}
}
//.....
}
}