0Pricing
Swift Academy · Aula

PassthroughSubject e CurrentValueSubject

Use subjects como pontes entre código imperativo e pipelines do Combine.

PassthroughSubject e CurrentValueSubject é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Boas-vindas

Os sujeitos são simultaneamente publicadores e assinantes. Eles fazem a ponte entre código imperativo e cadeias reativas do Combine.

PassthroughSubject

```swift let subject = PassthroughSubject() subject.sink { print($0) }.store(in: &cancellables) subject.send("Hello") subject.send("World") // Hello, World ``` Assinantes que chegam depois não recebem os valores enviados anteriormente.

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 ``` Armazena e reproduz o valor atual para novos assinantes.

PassthroughSubject versus CurrentValueSubject

• `PassthroughSubject` — não armazena valores; assinantes que chegam depois não veem nada • `CurrentValueSubject` — armazena o valor mais recente; assinantes que chegam depois o recebem imediatamente

Enviando a conclusão

```swift subject.send(completion: .finished) // or: subject.send(completion: .failure(MyError.bad)) ``` Após a conclusão, não é possível enviar mais valores.

Usando como publicador

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

Fazendo a ponte a partir de um delegado

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

Segurança das threads

Os sujeitos não são seguros para uso simultâneo em diferentes threads por padrão. Envie valores a partir de uma thread consistente ou use `receive(on:)` para fazer a troca.

Testando com sujeitos

```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 no 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) } } ```

Verificação rápida

Qual Subject reproduz seu valor atual para novos assinantes?

Recapitulação

Principais conclusões: • `PassthroughSubject` — não armazena valores nem os reproduz • `CurrentValueSubject` — armazena o valor e o reproduz para assinantes que chegam depois • `send(completion:)` encerra o fluxo • `eraseToAnyPublisher()` oculta a interface do Subject • Os sujeitos fazem a ponte entre código imperativo → reativo Próximo: Comunicação em rede com Combine.

Perguntas Frequentes

A aula “PassthroughSubject e CurrentValueSubject” é grátis?

Sim — o texto completo de “PassthroughSubject e CurrentValueSubject” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “PassthroughSubject e CurrentValueSubject”?

Use subjects como pontes entre código imperativo e pipelines do Combine. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “PassthroughSubject e CurrentValueSubject”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Publishers e subscribers
  2. Operadores: map, filter, combineLatest
  3. PassthroughSubject e CurrentValueSubject
  4. Redes com Combine e URLSession
← Voltar para Swift Academy