В StackOverflow есть несколько ответов, уже отвечающих вашему конкретному варианту использования.Например, посмотрите на этот вопрос: получить прогресс от dataTaskWithURL в swift Для вашего конкретного случая использования уже есть ответы, использующие AFNetworking: AFNetworking 3.x загрузка из нескольких частей
Подводя итог, то, что вы хотите сделать, это 1.вычислите общий объем данных , которые вы хотите загрузить, и 2.общий объем данных, которые вы уже загрузили с помощью методов делегата URLSession
.
Затем вы можете привязать эту информацию к вашему элементу пользовательского интерфейса, например, к вашему UIProgressView
.Убедитесь, что ваши задачи загрузки являются асинхронными, чтобы иметь задачу блокировки без загрузки и иметь возможность обновлять ваш пользовательский интерфейс во время загрузки.Это также означает, что кроме задачи загрузки ваш код для обновления пользовательского интерфейса должен выполняться в главном потоке.Вы можете применить это через DispatchQueue.main.async
при необходимости.