How do I use Just, PassthroughSubject, and CurrentValueSubject with Combine in Swift?

Using Just, PassthroughSubject, and CurrentValueSubject in Combine Framework enables you to handle various data flow scenarios in Swift applications efficiently. Below is an example of how to use these components from the Combine framework.

Combine, Just, PassthroughSubject, CurrentValueSubject, Swift, Reactive Programming

This example demonstrates how to create a simple publisher using Just, how to emit values with PassthroughSubject, and how to maintain a state using CurrentValueSubject.

import Combine

// Using Just
let justPublisher = Just("Hello, Combine!")
justPublisher
    .sink(receiveCompletion: { completion in
        print("Completion: \(completion)")
    }, receiveValue: { value in
        print("Value from Just: \(value)")
    })

// Using PassthroughSubject
let passthroughSubject = PassthroughSubject()
passthroughSubject
    .sink(receiveCompletion: { completion in
        print("Completion: \(completion)")
    }, receiveValue: { value in
        print("Value from PassthroughSubject: \(value)")
    })
    
passthroughSubject.send("Event 1")
passthroughSubject.send("Event 2")

// Using CurrentValueSubject
let currentValueSubject = CurrentValueSubject("Initial Value")
currentValueSubject
    .sink(receiveCompletion: { completion in
        print("Completion: \(completion)")
    }, receiveValue: { value in
        print("Current Value: \(value)")
    })
    
currentValueSubject.send("Updated Value 1")
currentValueSubject.send("Updated Value 2")
        

Combine Just PassthroughSubject CurrentValueSubject Swift Reactive Programming