SwiftUI Academy · Lekcja

Wstrzykiwanie zależności do ViewModeli

Wstrzykuj usługi, aby ViewModeli można było łatwo testować

Lekcja 4 z 413 kroki

Wstrzykiwanie zależności do ViewModeli to bezpłatna lekcja SwiftUI Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SwiftUI Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SwiftUI Academy zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

The Hidden Dependency Problem

If a ViewModel creates its own network client inside itself, tests are stuck hitting the real server. That tight coupling makes it hard to swap later.

Inject Instead of Create

Dependency injection means passing in what a ViewModel needs from outside, rather than letting it build those services itself.

Define a Service Protocol

Describe the work with a protocol, not a concrete type. The ViewModel depends on the abstraction and never on a specific implementation.

protocol TaskService {
    func fetch() async -> [Task]
}

Accept It in the Initializer

Take the dependency through the init. Now any object that conforms to the protocol can be handed to the ViewModel.

init(service: TaskService) {
    self.service = service
}

Use the Injected Service

Inside methods, call the stored service rather than a hardcoded client. The ViewModel no longer cares who actually does the work.

tasks = await service.fetch()

A Real Implementation

Your production type conforms to the protocol and talks to the network. You inject it when building the real screen.

struct LiveTaskService: TaskService {
    func fetch() async -> [Task] { [] }
}

A Mock for Tests

For tests, write a mock that returns fixed data instantly. Inject it to verify ViewModel logic without any real network calls.

struct MockTaskService: TaskService {
    func fetch() async -> [Task] { sample }
}

Tests Become Trivial

With a mock injected, a test just calls a method and checks the result. No waiting, no flakiness, only fast and predictable runs. ✅

A Default for Convenience

Give init a default real service so everyday code stays short, while tests can still override it with a mock when needed.

init(service: TaskService = LiveTaskService())

Injecting via the Environment

For app-wide services, pass them through SwiftUI @Environment instead of every initializer, keeping call sites clean.

The Payoff

Injection makes ViewModels flexible and isolated. You can swap real, fake, or offline services without touching the view at all.

Quick Check

Why depend on a protocol instead of a concrete service?

Recap: Dependency Injection

You learned to inject services through a protocol, swap real for mock in tests, and even use @Environment for shared dependencies. That completes MVVM.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Wstrzykiwanie zależności do ViewModeli” jest bezpłatna?

Tak — pełny tekst „Wstrzykiwanie zależności do ViewModeli” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SwiftUI Academy, przejdź na CoddyKit PRO. Kurs SwiftUI Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wstrzykiwanie zależności do ViewModeli”?

Wstrzykuj usługi, aby ViewModeli można było łatwo testować Ćwiczysz SwiftUI Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SwiftUI Academy?

Nie wymagamy żadnego doświadczenia. SwiftUI Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wstrzykiwanie zależności do ViewModeli”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SwiftUI Academy?

Tak. Każda lekcja SwiftUI Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego MVVM pasuje do SwiftUI
  2. Projektowanie ViewModelu
  3. Powiązanie widoków z ViewModelami
  4. Wstrzykiwanie zależności do ViewModeli
← Powrót do SwiftUI Academy