Swift5. Как ждать запрос из другого файла .swift? - PullRequest
0 голосов
/ 04 февраля 2020

enter image description here

Есть 2 файла:

1-й - Сетевые запросы

2-й - ViewController, место, где результат getCities() -> Array<String> { ... } должен быть вызван (по крайней мере можно проверить с помощью print

Используя это, чтобы сделать запрос:

request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

    let session = URLSession.shared
    let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
      if (error != nil) {
        print(error as Any)
      } else { ...
}

Проблема: Результат UIViewController запроса не может быть получен до окончания sh запроса. list из UIViewController инициируется слишком рано.

PS: уже пробовали

семафор

и

группа

но, как по мне, это работает только для того же класса / файл.

1 Ответ

4 голосов
/ 04 февраля 2020

Не спрашивайте, скажите

Используйте обработчик завершения, чтобы уведомить о доступности данных. Нет семафора, нет группы.

func getCities(completion: @escaping ([String]) -> Void) { ... }

и

getCities { [weak self] cities in
    self?.list = cities
    print(cities)
    // do other stuff with received cities
}
...