Swift Academy · Lekcja

PassthroughSubject i CurrentValueSubject

Używanie subjectów jako pomostów między kodem imperatywnym a potokami Combine.

Lekcja 3 z 412 kroki

PassthroughSubject i CurrentValueSubject to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 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 Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Witamy

Subjects są jednocześnie publisherami i subskrybentami. Łączą kod imperatywny z reaktywnymi potokami Combine.

PassthroughSubject

```swift let subject = PassthroughSubject() subject.sink { print($0) }.store(in: &cancellables) subject.send("Hello") subject.send("World") // Hello, World ``` Późniejsi subskrybenci nie otrzymują wcześniej wysłanych wartości.

CurrentValueSubject

```swift let subject = CurrentValueSubject(0) subject.sink { print($0) }.store(in: &cancellables) // prints 0 immediately subject.value = 1 // prints 1 subject.value = 2 // prints 2 ``` Przechowuje bieżącą wartość i odtwarza ją dla nowych subskrybentów.

PassthroughSubject a CurrentValueSubject

• `PassthroughSubject` — nie przechowuje wartości; późniejsi subskrybenci niczego nie otrzymują • `CurrentValueSubject` — przechowuje najnowszą wartość; późniejsi subskrybenci otrzymują ją natychmiast

Wysyłanie informacji o zakończeniu

```swift subject.send(completion: .finished) // or: subject.send(completion: .failure(MyError.bad)) ``` Po zakończeniu nie można wysyłać kolejnych wartości.

Używanie jako Publisher

```swift let events: AnyPublisher = subject.eraseToAnyPublisher() // Expose only the Publisher interface, hide Subject ```

Mostkowanie delegata

```swift class LocationManager: NSObject, CLLocationManagerDelegate { let locationSubject = PassthroughSubject() func locationManager(_ m: CLLocationManager, didUpdateLocations l: [CLLocation]) { locationSubject.send(l.last!) } } ```

Bezpieczeństwo wątkowe

Subjects domyślnie nie są bezpieczne wątkowo. Proszę wysyłać wartości z jednego, spójnego wątku albo użyć `receive(on:)`, aby przełączyć wątek.

Testowanie z użyciem Subjects

```swift func testSearch() { let subject = PassthroughSubject() var results: [String] = [] subject.sink { results.append($0) }.store(in: &cancellables) subject.send("swift"); subject.send("ios") XCTAssertEqual(results, ["swift","ios"]) } ```

Combine w MVVM

```swift class SearchViewModel: ObservableObject { let querySubject = CurrentValueSubject("") @Published var results: [String] = [] init() { querySubject .debounce(for: 0.3, scheduler: RunLoop.main) .flatMap { search($0) } .assign(to: &$results) } } ```

Szybkie sprawdzenie

Który Subject odtwarza bieżącą wartość dla nowych subskrybentów?

Podsumowanie

Najważniejsze informacje: • `PassthroughSubject` — nie przechowuje wartości i niczego nie odtwarza • `CurrentValueSubject` — przechowuje wartość i odtwarza ją późniejszym subskrybentom • `send(completion:)` kończy strumień • `eraseToAnyPublisher()` ukrywa interfejs Subject • Subjects łączą kod imperatywny z reaktywnym Dalej: obsługa sieciowa z Combine.
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
122
Lekcje
409

Często zadawane pytania

Czy lekcja „PassthroughSubject i CurrentValueSubject” jest bezpłatna?

Tak — pełny tekst „PassthroughSubject i CurrentValueSubject” 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 Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „PassthroughSubject i CurrentValueSubject”?

Używanie subjectów jako pomostów między kodem imperatywnym a potokami Combine. Ćwiczysz Swift 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ąć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift 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 3 z 4.

Ile czasu zajmuje lekcja „PassthroughSubject i CurrentValueSubject”?

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 Swift Academy?

Tak. Każda lekcja Swift 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. Publishery i subskrybenci
  2. Operatory: map, filter, combineLatest
  3. PassthroughSubject i CurrentValueSubject
  4. Obsługa sieci z Combine i URLSession
← Powrót do Swift Academy