Вызов асинхронного закрытия из исходного делегата ViewController - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующие настройки:

Storyboard.main

  1. Запуск VC выполняет асинхронный запрос API взамыкание dataGatheringClosure

  2. Обработчик завершения замыкания dataGatheringClosure передает результат в VC1 посредством делегирования с использованием метода протокола setData.

  3. В пределах setData, VC1 передает результат в VC2 , используя следующий код:

    if let vc2 = self.tabBarController?.viewControllers?[1] as? VC2Controller {
        vc2.data = result
    }
    

IЯ могу передать данные с Launch VC на VC2 , но теперь мне нужно обновить данные, выполнив dataGatheringClosure в Launch VC .

Мой вопрос: как мне получить доступ к Запустить методы VC из VC2 ?И является ли этот подход надежным?

В качестве обходного пути я скопировал код закрытия dataGatheringClosure внутри TabBar VC и заставил VC 2 вызвать его метод self.tabBarController.dataGatheringClosure.Однако это дублирование, и я также не знаю, рекомендуется ли выполнять тяжелые запросы API в TabBarController.

1 Ответ

0 голосов
/ 24 сентября 2018

Первым шагом является отделение данных от ViewControllers.Создайте одноэлементный класс, как показано ниже, и используйте его для передачи нужных вам данных.

class Data {

    static let shared = Data()
    // Declare any other data properties you need here...
    var result = [String]()

    private init() {}

    func initialize() {
        // Write code to initialize the data
        refresh()
    }

    func refresh() {
        // Write code to refresh the data
    }
}

Инициализация данных при запуске приложения или там, где это необходимо, с помощью приведенного ниже кода:

Data.shared.initialize()

Вы можетеТеперь доступ к данным из любого места в вашем приложении, используя статическую переменную Data.shared.Для обновления данных вы можете сделать следующее:

Data.shared.refresh()

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...