: 이벤트 처리 연산자들을 통해 비동기 이벤트를 처리할 수 있게 하는 프레임워크
3가지 주요 컴퍼넌트
- Publisher: 생산자, 배출자, 크리에이터
- Subscriber: 소비자, 구독자
- Operator: 마법사, 가공하는 사람
데이터를 배출
구체적인 Output, Failure 타입 정의
빌트인 Publisher
Just
: 값을 다룸 Future
: Function을 다룸iOS에서 자동으로 제공해주는 녀석들
: send(_:)
메소드를 이용해서 이벤트 값을 주입할 수 있는 Publisher
PassthroughSubject
: Subcriber가 달라고 요청하면, 그때 부터, 받은 값을 전달해주기만 한다. (전달한 값을 들고 있지 않음)CurrentValueSubject
: Subcriber가 달라고 요청하면, 최근에 가지고 있던 값을 전달하고, 그때 부터, 받은 값을 전달한다. (전달한 값을 들고 있음): @Published
로 선언된 프로퍼티를 퍼블리셔로 만들어준다
$
를 이용해서 퍼블리셔에 접근할수 있다class Weather { @Published var temperature: Double init(temperature: Double) { self.temperature = temperature } } let weather = Weather(temperature: 20) let subscription = weather.$temperature.sink { print ("Temperature now: \($0)") } weather.temperature = 25 // Temperature now: 20.0 // Temperature now: 25.0
assign
: Publisher가 제공한 데이터를 특정 객체의 키패스에 할당sink
: Publisher가 제공한 데이터를 받을수 있는 클로져를 제공: Subscriber가 Publisher와 연결됨을 나타내는 녀석. Publisher가 발행한 구독 티켓
Cancellable
protocol을 따르고 있다: 언제, 어떻게 클로져를 실행할지 정해주는 녀석
subscribe(on:)
: Publisher가 어느 스레드에서 수행할지 결정
receive(on:)
: Operator, Subscriber 가 어느 스레드에서 수행할지 결정해주는것
let jsonPublisher = MyJSONLoaderPublisher() // Some publisher.
jsonPublisher
.subscribe(on: backgroundQueue)
.receive(on: RunLoop.main)
.sink { value in
label.text = value
}