Метод возвращает пустую функцию, а хотелось бы массив с объектами

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023

Есть метод 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)
    }