Борьба с async/await: получение изображения из основного потока при обновлении пользовательского интерфейса [закрыто]IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Борьба с async/await: получение изображения из основного потока при обновлении пользовательского интерфейса [закрыто]

Сообщение Anonymous »

Я изучаю async/await и пытаюсь получить изображение по URL-адресу за пределами основного потока, чтобы избежать его перегрузки, а затем обновляю пользовательский интерфейс. Прежде чем начать выборку, я хочу показать индикатор загрузки (работа, связанная с пользовательским интерфейсом). Я реализовал это двумя разными способами, используя Task и Task.detached.
Пожалуйста, объясните, как происходит переключение потоков в двух методах ниже.
Будем очень признательны за любые рекомендации по передовому опыту для этих сценариев. Заранее спасибо!

Код: Выделить всё

class MyViewController : UIViewController{
override func viewDidLoad() {
super.viewDidLoad()

//MARK: First approch
Task{@MainActor in
showLoading()
let image = try? await fetchImage() //Will the image fetch happen on main thread?
updateImageView(image:image)
hideLoading()
}

//MARK: 2nd approch
Task{@MainActor in
showLoading()
let detachedTask = Task.detached{
try await self.fetchImage()
}
updateImageView(image:try? await detachedTask.value)
hideLoading()
}
}

func fetchImage() async throws -> UIImage {
let url = URL(string: "https://via.placeholder.com/600x400.png?text=Example+Image")!

//Async data function call
let (data, response) = try await URLSession.shared.data(from: url)

guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
throw URLError(.badServerResponse)
}

guard let image = UIImage(data: data) else {
throw URLError(.cannotDecodeContentData)
}

return image
}

func showLoading(){
//Show Loader handling
}

func hideLoading(){
//Hides the loader
}

func updateImageView(image:UIImage?){
//Image view updated
}
}
Отредактировано: в соответствии с правилами stackoverflow я преобразовал несколько вопросов в один вопрос.

Подробнее здесь: https://stackoverflow.com/questions/792 ... le-updatin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»