
Getting Started with Combine Framework in Swift - Introduction to Functional Reactive Programming
Publisher부터 Subscriber까지 이어지는 데이터 스트림을 결합input 형식과 output 형식 존재, 각 모듈은 퍼블리셔부터 섭스크라이버까지 연결되는 일종의 블럭input, output, failure 경우 등을 조합한 AnyPublisher 사용 가능PassthroughsubjectCurrentvaluesubject@PublishedJustFutureNotification PublisherURLSession Publishersinkassign(on, to)assign(on)import UIKit
import Foundation
import Combine
var cancellables = Set<AnyCancellable>()
var subscription: Cancellable? = Timer.publish(every: 0.1, on: .main, in: .common)
.autoconnect()
.throttle(for: .seconds(1), scheduler: DispatchQueue.main, latest: true)
.scan(0, { count, output in
return count + 1
})
.filter {$0 > 2 && $0 < 100}
.sink { output in
print("Finished stream with \(output)")
} receiveValue: { value in
print("Received value \(value)")
}
RunLoop.main.schedule(after: .init(Date(timeIntervalSinceNow: 5))) {
print("Cancel Subscription")
// subscription.cancel()
subscription = nil
}
Timer 퍼블리셔를 사용한 Combine 예제throttle을 통해 타이머가 0.1초마다 오더라도 1초 단위로 걸러주기scan을 통해 들어오는 데이터의 개수 카운팅filter를 통해 값 필터링 가능sink를 통해 들어오는 데이터를 사용, UI 패치 등에 사용하기publish로 발행된 데이터 스트림이 sink 단위로 이어질 때 개발자의 사용 목적에 따라 map, flatMap 등 다양한 고차 함수 사용 가능receive를 통해 어떤 스레드에서 받을 것인지 결정할 수 있음cancel, nil로 주기 등 구독 취소 가능