Выбор ответа Junior Внедрение зависимостей обновлено
DI на iOS
Вопрос
Как чаще всего делают внедрение зависимостей в iOS-проектах?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вручную через инициализаторы и composition root, иногда с контейнером вроде Swinject. Стандартного DI-фреймворка у Apple нет, и Swift хорошо подходит для ручного DI: зависимости передаются в инициализатор, а собирает граф одно место (composition root, фабрики модулей, координаторы).
Варианты ответа
- Через аннотации Dagger, портированного на Swift с помощью макросов и кодогенерации
- Вручную через инициализаторы и composition root, иногда с контейнером вроде Swinjectправильный ответ
- Через атрибут
@Injectиз стандартной библиотеки Swift, который появился вместе с макросами - Внедрение на iOS невозможно: UIKit сам создаёт контроллеры, поэтому используют только синглтоны
Разбор
Стандартного DI-фреймворка у Apple нет, и Swift хорошо подходит для ручного DI: зависимости передаются в инициализатор, а собирает граф одно место (composition root, фабрики модулей, координаторы). Для крупных проектов есть контейнеры (Swinject, Factory, Needle с проверкой при компиляции). В SwiftUI часть зависимостей удобно пробрасывать через Environment. @Inject в Swift нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.