Современные приложения на iOS часто страдают от одной беды: значительная часть кода в них нужна не для реализации той или иной функциональности, а только для транзита параметров через промежуточные слои. И чтобы добавить зависимость в глубокий компонент, нужно внести изменения во всех промежуточных функциях.
В итоге код теряет семантическое значение, объём boilerplate растёт, рефакторинг усложняется, а инкапсуляция нарушается. Стандартные решения ведут к другим проблемам: синглтоны сложно тестировать, SwiftUI Environment работает только в иерархии View, а DI-контейнеры теряют compile-time-проверок.
🤖 Альфред Зиен, руководитель группы iOS-разработки в Яндекс Браузере, предложил свой способ победить передачу зависимостей — и выложил в открытый доступ Implicits, библиотеку implicits‑параметров на чистом Swift.
С её помощью зависимости объявляются локально через
@Implicit и передаются по стеку одним ImplicitScope, а специальный анализатор на этапе сборки строит граф вызовов и гарантирует, что нужный контекст не забыт. Это позволяет сохранить гибкость обычного кода и радикально уменьшить шум в больших модулях.➕ Подробнее про Implicits читайте на Хабре
Внутри Альфред показывает, как библиотека работает в продакшен‑коде Браузера (1,5 млн строк Swift): от корневых фабрик с сотнями зависимостей до маленьких компонентов, замыканий и lazy‑свойств. А ещё разбирает сильные и слабые стороны подхода и показывает, какие вещи должны оставаться явными параметрами.
➕ Репозиторий ждёт вас на гитхабе
Подписывайтесь:
💬 @Yandex4Developers
