Выбор ответа Junior Внедрение зависимостей обновлено

DI на iOS

Вопрос

Как чаще всего делают внедрение зависимостей в iOS-проектах?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вручную через инициализаторы и composition root, иногда с контейнером вроде Swinject. Стандартного DI-фреймворка у Apple нет, и Swift хорошо подходит для ручного DI: зависимости передаются в инициализатор, а собирает граф одно место (composition root, фабрики модулей, координаторы).

Варианты ответа

  1. Через аннотации Dagger, портированного на Swift с помощью макросов и кодогенерации
  2. Вручную через инициализаторы и composition root, иногда с контейнером вроде Swinjectправильный ответ
  3. Через атрибут @Inject из стандартной библиотеки Swift, который появился вместе с макросами
  4. Внедрение на iOS невозможно: UIKit сам создаёт контроллеры, поэтому используют только синглтоны

Разбор

Стандартного DI-фреймворка у Apple нет, и Swift хорошо подходит для ручного DI: зависимости передаются в инициализатор, а собирает граф одно место (composition root, фабрики модулей, координаторы). Для крупных проектов есть контейнеры (Swinject, Factory, Needle с проверкой при компиляции). В SwiftUI часть зависимостей удобно пробрасывать через Environment. @Inject в Swift нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.