TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #129 899
🔢 Dependency Injection: как правильно внедрять зависимости в SwiftUI.

Сегодня поговорим о Dependency Injection (DI) — мощный подход, который делает ваш код чище, тестируемым и гибким.


⚠️ Что такое Dependency Injection?

Это способ передачи зависимостей извне, вместо создания их внутри класса.

Без использования DI:


class MyViewModel {
private let service = MyService() // Зависимость создаётся внутри
}


С использованием DI:


class MyViewModel {
private let service: MyService

init(service: MyService) { // Зависимость передаётся извне
self.service = service
}
}



🤔 Зачем это нужно?

🔸 Тестируемость: можно подменять зависимости на моки.
🔸 Гибкость: легко менять реализации (например, для разных сборок).
🔸 Чистая архитектура: сущности не знают, как создаются их зависимости.
🔸 Масштабирование: удобное расширение функционала благодаря добавлению зависимостей.


✅ Три способа внедрения зависимостей в SwiftUI:

1️⃣ Через инициализатор (Constructor Injection).


struct MyContentView: View {
let service: MyNetworkService

var body: some View {
Text(service.fetchText())
}
}

MyContentView(
service: MyNetworkService()
)


2️⃣ Через свойства (Property Injection).


class MyViewModel: ObservableObject {
var analytics: MyAnalyticsService? // Можно задать позже
}

let myViewModel = MyViewModel()
myViewModel.analytics = MyAnalyticsService()


3️⃣ Через .environmentObject (Environment).


@main
struct MyApp: App {
let service = MyNetworkService()

var body: some Scene {
WindowGroup {
MyContentView()
.environmentObject(service)
}
}
}

struct MyContentView: View {
@EnvironmentObject var service: MyNetworkService

var body: some View {
Text(service.fetchText())
}
}



💡 Вывод:

Dependency Injection — это не просто модный паттерн, а реальный способ сделать ваш код чище и гибче. Начните с малого — вынесите хотя бы одну зависимость наружу, и вы сразу заметите, насколько проще стало тестировать и менять логику.


➡️ Подписаться на канал
Мобильный трудоголик
  • ❤ 22
  • 👍 11
  • 🔥 3
More from @hardworkerit
  1. Oct 9, 2026👨‍💻 Умение адаптироваться - важный навык айтишника, который часто недооценивают. В ИТ не…
  2. Oct 8, 2026🈸 Apple обяжет разработчиков поддерживать iPhone Duo. Apple опубликовала требования к при…
  3. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  4. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  5. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  6. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →