Настройка UIProgressView из асинхронных фоновых задач

Я новичок в Swift и создаю небольшое приложение, которое передает некоторые данные HealthKit в веб-службу самостоятельной сборки. Я поместил UIProgressView в свой Main.storyboard и подключил его к ViewController.swift:

@IBOutlet weak var syncHealthProgress: UIProgressView!

Из действия есть 6 вызовов веб-службы через несколько шагов вне ViewController. Сначала я получаю данные о здоровье, которые выполняются в фоновом режиме (HKStatisticsCollectionQuery). В фоновой задаче я беру результат и делаю вызов API с данными (URLSession), который также выполняется асинхронно.

Что я хочу сделать: каждый раз, когда вызов API завершается успешно, я хочу увеличить прогресс на 1/6.

Итак, какова наилучшая практика для этого? Невозможно получить доступ к пользовательскому интерфейсу из-за пределов основного потока (пытался передать syncHealthProgress в качестве параметра вызовам API, который выглядит грязным и не работает).

Любой намек?


person Sven R.    schedule 18.09.2017    source источник
comment
Пожалуйста, обновите свой вопрос соответствующим кодом, показывающим, что вы сделали и что вы пробовали. Четко объясните, какие проблемы у вас возникают с кодом.   -  person rmaddy    schedule 18.09.2017


Ответы (1)


Если вы просто пытаетесь убедиться, что логика обновления пользовательского интерфейса работает в основном потоке, просто выполните:

DispatchQueue.main.async {
    // code to run on main queue
}
person nicksweet    schedule 18.09.2017