Как использовать внедрение зависимостей в SwiftUI | Расширенное обучение #16

YOUTUBE · 27.11.2025 03:09

Ключевые темы и таймкоды

Введение в внедрение зависимостей

0:04
  • Ник представляет канал Swiftl Thinking, посвященный Swift и пользовательскому интерфейсу.
  • Видео посвящено основам внедрения зависимостей.
  • Внедрение зависимостей позволяет изменять входные данные через инициализатор.

Архитектура приложения и внедрение зависимостей

0:59
  • Внедрение зависимостей помогает изменять входные данные.
  • Важно понимать, когда и в каком порядке создавать зависимости.
  • Переход к Xcode для демонстрации простого внедрения зависимостей.

Подготовка к внедрению зависимостей

2:27
  • Ник возвращается в проект Xcode и создает новый файл для демонстрации.
  • Рекомендует посмотреть предыдущее видео о протоколах для лучшего понимания.
  • Создает класс ViewModel для внедрения зависимостей.

Создание модели и инициализация ViewModel

3:43
  • Создает структуру PostsModel для хранения данных.
  • В ViewModel создает массив данных и функцию для загрузки сообщений.
  • Функция загрузки сообщений будет вызывать отдельный класс для обработки данных.

Создание сервиса обработки данных

4:57
  • Создает класс Service для обработки данных.
  • Создает функцию getData для загрузки данных из Интернета.
  • Использует API JSONPlaceholder для тестирования.

Загрузка данных и преобразование в модель

6:31
  • Загружает данные с URL и использует Combine для обработки ответа.
  • Преобразует данные в модель массива сообщений.
  • Декодирует данные с помощью JSONDecoder и возвращает издателя.

Использование синглтона для доступа к сервису

9:34
  • Использует шаблон проектирования singleton для доступа к сервису.
  • В ViewModel вызывает функцию getData и синхронизирует данные с массивом.
  • Создает var cancelables для хранения подписчиков и завершений.

Вывод постов на экран

11:20
  • Создание вида прокрутки и vstack для отображения постов.
  • Использование идентифицируемого для соответствия модели post.
  • Вывод текста с названием поста на экран.

Внедрение зависимостей

12:24
  • Использование синглтона для серверов данных.
  • Проблемы с глобальными переменными и многопоточностью.
  • Невозможность настройки инициализации синглтона.

Проблемы с синглтонами

13:08
  • Синглтоны являются глобальными, что может привести к путанице.
  • Проблемы с многопоточностью и доступом к одному экземпляру из разных мест.
  • Невозможность настройки инициализации синглтона.

Решение проблем с синглтонами

15:24
  • Внедрение зависимостей как альтернатива синглтонам.
  • Инициализация зависимостей на ранней стадии приложения.
  • Внедрение службы данных в представления и модели представлений.

Внедрение зависимостей в представление

16:59
  • Создание ссылки на службу данных в модели представления.
  • Инициализация viewmodel с передачей данных.
  • Внедрение службы данных в представление.

Настройка инициализации

20:36
  • Возможность настройки инициализации службы данных.
  • Передача URL-адреса в службу данных для настройки.
  • Инициализация службы данных с URL-адресом на ранней стадии приложения.

Настройка службы передачи данных

21:50
  • Внедрение службы передачи данных и настройка инициализации.
  • Возможность изменения URL и других значений внутри класса.
  • Важность настройки для создания тестов.

Решение проблем с синглтонами

22:27
  • Исправление проблемы с глобальными синглтонами.
  • Доступ к службе данных только через внедрение.
  • Решение проблемы с инициализацией.

Создание различных служб данных

23:15
  • Возможность использования разных служб данных для разных сред.
  • Создание класса mock data service для тестирования и разработки.
  • Использование протокола для замены производственной службы данных.

Реализация протокола обслуживания данных

25:00
  • Создание протокола с функцией getdata.
  • Соответствие производственной и макетной служб данных протоколу.
  • Создание поддельного издателя для макетной службы данных.

Тестирование с поддельными данными

27:33
  • Внедрение протокола службы данных в viewmodel.
  • Возможность использования производственной или макетной службы данных.
  • Эффективность использования поддельных данных для разработки и тестирования.

Инициализация макетной службы данных

29:36
  • Создание инициализатора для макетной службы данных.
  • Возможность инициализации с поддельными или реальными данными.
  • Ускорение разработки и тестирования приложения.

Заключение и дальнейшие шаги

31:02
  • Внедрение зависимостей для тестирования и разработки.
  • Важность настройки данных для тестирования.
  • Переход к тестированию пользовательского интерфейса и модульным тестам в следующих видео.

Использование службы данных

32:54
  • ViewModel теперь может использовать службу данных.
  • Служба данных соответствует протоколу, что делает приложение более масштабируемым.
  • Возможность подключения и отключения различных служб передачи данных.

Внедрение зависимостей

33:48
  • При большом количестве зависимостей инициализация становится сложной.
  • Создание класса зависимостей для инициализации всех зависимостей.
  • Внедрение класса зависимостей вместо отдельных зависимостей.

Заключение

34:32
  • Создание родительского мастер-класса для хранения зависимостей.
  • Рекомендация для начинающих использовать отдельные зависимости.
  • Призыв подписаться, поставить лайк и оставить комментарий.