You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Customize handling of asynchronous events by combining event-processing operators
💡 시간 경과에 따라 변경되는 값을 내보내는 Publisher와 이를 수신하는 Subscriber로 시간 경과에 따른 값 처리를 위한 선언적 Swift API
import Combine
Publisher
protocolPublisher{associatedtypeOutputassociatedtypeFailure:Errorfunc receive<S>(subscriber:S)where S :Subscriber, Self.Failure ==S.Failure, Self.Output ==S.Input}
하나 혹은 여러 개의 Subscriber 객체에 시간이 흐름에 따라 값을 내보낼 수 있는 타입을 선언하기 위한 프로토콜 형태
이벤트를 보내는 역할을 담당함
Output, Failure 타입이 제네릭으로 구현되어 있음
Declares that a type can transmit a sequence of values over time
Subscriber에게 시간이 지남에 따라 값 (이벤트) 을 보낼 수 있는 타입
관심있는 값에 Subscribe를 걸고 → 그 값에 새 이벤트가 발생하면 (값이 변경되면) → 비동기식으로 이벤트 (값) 을 전달 받음
Publisher와 Subscriber 사이에서 발생하는 이벤트 순서
Publisher가 Subscriber를 구독
Publisher의 인스턴스함수 subscribe()를 호출
Subscriber는 Subscribe를 생성해서 Subscriber에게 제공
Publisher은 내부적으로 receive()함수를 호출
게시자가 받은 구독자에게 Subscriber의 인스턴스 함수 receive(subscription: )을 통해 구독을 전달
Subscriber가 값을 요청
Subscription(구독)의 인스턴스함수인 request()를 호출
Publisher가 값을 보냄
Subscriber의 인스턴스 메소드 receive(_ input)를 이용해서 전달하며 구독자는 값을 받음
Publisher가 완료를 보냄
게시자가 모든 값을 보냈다면 혹은 완료 이벤트를 receive(completion: )함수를 통해서 구독자에게 완료이벤트를 전달함
예시 코드
classIntSubscriber:Subscriber{typealiasInput=InttypealiasFailure=Never
// Publisher가 Subscription주면 호출됨
func receive(subscription:Subscription){
subscription.request(.max(1))}
// Publisher가 주는 값을 처리
func receive(_ input:Int)->Subscribers.Demand{print("Received value: \(input)")
// Publisher에게 한 번 더 달라고 요청
return.max(1)}func receive(completion:Subscribers.Completion<Never>){print("Received completion: \(completion)")}}
// IntArray를 하나 만듭니다.
letintArray:[Int]=[1,2,3,4,5]
// IntSubscriber를 만듭니다.
letintSubscriber=IntSubscriber()
// IntArray Publisher를 subscribe 합니다.
// intSubscriber가 intArray.publisher에게 값을 요청하면 달라고 말합니다.
intArray.publisher
.subscribe(intSubscriber)
Received value:1
Received value:2
Received value:3
Received value:4
Received value:5
Received completion: finished
Publisher 종류
Just
가장 단순한 형태의 Publsiher로 에러타입으로 Never를 갖습니다.
Promise
Just와 비슷하지만 Filter Type을 정의할 수 있습니다.
Fail
정의된 실패타입을 내보냅니다.
Empty
어떤 데이터도 발행하지 않는 퍼블리셔로 주로 에러처리나 옵셔널값을 처리할때 사용됩니다.
Sequence
데이터를 순차적으로 발행하는 Publisher로 (1…10).Publisher로 이에 해당합니다.
publicstructJust<Output>:Publisher{
/// The kind of errors this publisher might publish.
///
/// Use `Never` if this `Publisher` does not publish errors.
publictypealiasFailure=Never}
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
누추한 저의 Combine 정리 노션
Combine
import Combine
Publisher
Publisher와 Subscriber 사이에서 발생하는 이벤트 순서
예시 코드
Publisher 종류
@published 프로퍼티 래퍼
AnyPublisher
Subscriber
AnySubscriber
Operators
Subject
Subscription
Cancellable
Change Thread
Beta Was this translation helpful? Give feedback.
All reactions