Метод возвращает пустую функцию, а хотелось бы массив с объектами
Есть метод fetch в структуре, очень хочется, чтобы он вернул массив. Но метод с замыканием ничего не возвращает, хотя на этапе finishedCh = data все как надо тип присутствует.
Если даже методу performRequest дать переменную, то она возвращает пустой метод.
typealias Handler = (Result<[Character], Error>) -> ()
func fetch() -> [Character]{
var finishedCh: [Character] = []
performRequest(urlString: charactersUrl) { result in
switch result {
case .success(let data):
finishedCh = data
case .failure(let error):
print(error)
}
}
return finishedCh
}
Помогите, пожалуйста, добрые люди.
Основная цель: где-то во вьюКотроллере метод fetch дергается и ждет когда будет массив для обычного представления в таблице.
Ответы (1 шт):
Вызов performRequest выполняется асинхронно, поэтому результат возвращается не сразу. А так как результата еще нет, то переменная finishedCh пустая и возвращается пустой массив. Вам нужно вернуть результат выполнения performRequest, например вот так:
func fetch(completion: @escaping ([Character]?) -> Void) {
performRequest(urlString: charactersUrl) { result in
switch result {
case .success(let data):
completion(data)
case .failure(let error):
completion(nil)
}
}
}
И вызывать функцию fetch вот так:
fetch { result in
print(result)
}