@driverx18

Как работать с данными полученными в замыкании после выхода из него?

Вот есть кусок кода ниже

func getData() {
let url = URL("...url...")!

        let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
            guard let data = data else { return }
         
            
            let root = try? JSONDecoder().decode(Root.self, from: data)
          
            print(root?.results[0])
        }.resume()

}


мне нужно получить уже после замыкания те данные, которые я распарсил, чтобы сделать в функции getData return. Но это упорно не получается, поскольку как я знаю, в свифте нельзя возвращать данные в замыканиях
Но что делать, если мне всё же эти данные нужно вернуть ?
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
1) использовать делегаты
2) использовать completions которые были переданы в метод getData и затем, использованы внутри замыкания:
func getData(completionHandler: (data: MyData?) -> Void) {
    let url = URL("...url...")!

    let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
        guard let data = data else { return }
            
        let root = try? JSONDecoder().decode(Root.self, from: data)
          
        print(root?.results[0])
        completionHandler(root?.results[0])
    }.resume()
}

тип такого. Ну, это грубый подход. Там бы еще хорошо иметь сигнализацию - данные получены и распарсены удачно или "ашипка!!!".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы