Почему не заходит в блок {data, response, error in?
Почему не заходит в блок {data, response, error in ... ?
func GetParam(_ url: String) -> String {
let url = URL(string: url)
guard let downloadURL = url else {return "" }
let session = URLSession.shared
session.dataTask(with: downloadURL) { data, response, error in
guard let data = data else {return}
do{
let responseVariant = try JSON(data: data)
for item in responseVariant.arrayValue {
self.imageId = item["image"].stringValue
}
} catch{
print(error)
}
}.resume()
return imageId
}
После session.dataTask(with: downloadURL) { data, response, error in сразу переходит к resume.
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Не заходит потому что dataTask выполняется асинхронно, чтобы получить данные вам нужно изменить сигнатуру метода например на такую и дождаться ответа
func GetParam(_ url: String, completion: @escaping (_ imageId: String) -> Void)
И соответственно при получении данных data вернуть их путем вызова completion(imageId)
При этом не совсем понятно что вы делаете в цикле
for item in responseVariant.arrayValue {
self.imageId = item["image"].stringValue
}
Очевидно в нем при переборе будет в конце-концов присвоено последнее значение в массиве, наверно нужно с чем-то сверяться и при выполнении условия выходить из цикла