В производственной среде SwiftUI: масштабируемая сетевая архитектура с использованием Async Await.
Karin Prater
0:00 / 0:00
В производственной среде SwiftUI: масштабируемая сетевая архитектура с использованием Async Await.
4 239 просмотров · 4 месяца назад
Karin Prater
24 тыс. подписчиков
4 239 просмотров · 4 месяца назад
В этом уроке я создам масштабируемый сетевой слой для приложения электронной коммерции на SwiftUI, используя API DummyJSON. Вместо того чтобы копировать и вставлять URL-запросы повсюду, мы создадим чистую архитектуру с многократно используемыми компонентами, протокольно-ориентированным проектированием и надлежащей обработкой ошибок.
Что мы рассмотрим:
Базовые запросы URLSession и декодирование JSON
Создание универсальной структуры клиента API (совместимой с Sendable)
Пользовательская обработка ошибок API (коды состояния, отмена, сообщения сервера)
Протокол конечных точек для гибкой, модульной генерации запросов
Шаблон сервисного уровня с внедрением зависимостей на основе протоколов
Моки-сервисы для предварительного просмотра и тестирования SwiftUI
Лучшие практики параллельного программирования в Swift (ключевое слово concurrent, изоляция акторов)
Организация проекта для будущей модульности (MVVM)
Объяснение ключевых архитектурных решений:
Почему протоколы лучше, чем перечисления для конечных точек
Почему структуры лучше, чем классы для клиента API
Почему значения по умолчанию в Approachable Concurrency могут создавать больше проблем, чем решать
Где провести границу между ViewModel, сервисами и акторами
Как сделать ViewModel более лаконичными, вынося чистую логику в сервисы
Это часть серии — далее мы свяжем это с бесконечными списками прокрутки, поиском, фильтрацией и пагинацией.
00:00 Обзор сетевых целей
01:11 Настройки параллельного доступа Xcode
03:14 Настройка ViewModel для продуктов
04:21 Моделирование ответов API
06:37 Первый тест асинхронной выборки
08:06 URLRequest и коды состояния
09:52 Выборка категорий
11:35 Обобщенная выборка и ApiError
14:20 Стратегия отмены и обработки ошибок
20:19 Извлечение структуры APIClient
23:32 Переходы акторов и ключевое слово Concurrent
25:05 Подключение данных к списку SwiftUI
27:38 Подготовка к мокам с использованием протоколов
29:39 Протокол сервиса продукта
30:33 Моки для предварительного просмотра
32:20 Отображение ошибок в пользовательском интерфейсе
34:41 Настройка протокола конечной точки
38:26 Создание запроса с помощью URLComponents
40:20 Конечные точки продуктов и категорий
43:35 Универсальная конечная точка для получения данных от клиента
50:42 Пользовательское сопоставление для каждой конечной точки
53:09 Сервисы против ViewModel
55:43 Очистка проекта и дальнейшие шаги
📁 Файлы проекта по ссылкам ниже 🛠 Создано с помощью Xcode 26.4 | Swift 6 | SwiftUI
https://school.swiftyplace.com/f/swif...
Ссылки
документация API https://dummyjson.com
интервью с Мэттом • Swift Concurrency Explained with Matt Mass...
Если вам понравилось то, что вы узнали, и вы хотите увидеть больше, посмотрите один из моих курсов!
👩🏻💻 Курс по компоновке SwiftUI
https://learn.swiftyplace.com/swiftui...
------------------
Что посмотреть дальше
-------------------
👉 О Карин Пратер
Привет, меня зовут Карин Пратер — я iOS-разработчик и преподаватель, помогающий вам освоить Swift, SwiftUI и разработку реальных iOS-приложений. Я создаю понятные уроки по архитектуре SwiftUI, UIKit, Combine, Core Data и тому, как создавать приложения для iPhone и macOS, используя лучшие практики. Подписывайтесь, чтобы получать еженедельные подробные обзоры Xcode, шаблонов проектирования Swift и всего, что вам нужно для роста как Apple-разработчика.
Новые видео каждую неделю по разработке iOS, SwiftUI и масштабируемой архитектуре приложений.
#SwiftUI