Firebase调用在ViewDidLoad中最后运行

问题描述 投票:0回答:1

我有一个视图控制器,我想在其中进行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。

swift firebase swift4 viewdidload
1个回答
1
投票

你为什么不在回调中创造那个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)
                    }

                }
            }
         //.....
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.