Комментарии 2
Вот этот код
let (data, response) = try await URLSession.shared.data(for: imageRequest)
надо бы заключать в блок do {} catch {}, иначе при ошибках на уровне URLSession (например, интернета нет) у нас метод ошибку не выбросит и мы получим то самое:
вызывающий объект застрянет в ожидании либо успешного, либо неудачного случая.
Как это не выбросит? URLSession
бросит ошибку, метод downloadImageWithImageId
её пробросит в вызывающий код. А там уже её будут обрабатывать. В Swift нельзя (неявно) не обработать ошибку, она никуда не пропадёт. Если бы ошибка не пробрасывалась наверх, компилятор просто не дал бы написать там try
.
UPD: другое дело, что тут есть кастомный тип ошибок DownloadError
, и хорошо бы сделать do/catch
и "обернуть" ошибку URLSession
в DownloadError
, но это не обязательно (ну и в целом дело вкуса), даже без этого ошибка никуда не денется.
Async / Await in Swift