Combine

핏핏·2022년 6월 15일
0

[ios] swift

목록 보기
1/1

Combine 효율적인 비동기처리

일관된 방식으로 비동기 처리를 할수 있는 API를 combine으로 제공

Combine Overview

  • Publisher
    생산자, 배출자
  • Subscriber
    소비자, 구독자
  • Operator
    변경자,가공자

Event Stream (Event pipeline)

Publisher -> Operator -> Subscriber

Publisher

protocol Publisher {
 accsociatedtype Output
 accsociatedtype Failure: Error
 func subscribe<S: Subscriber>(_ subscriber: S)
 where S.Input == Output, S.Failure == Failure  
}
  • 데이터를 배포
  • 구체적인 output 및 실패 타입을 정의함
  • Subscriber 가 요청한것 만큼 데이터를 제공

Subject(Publisher)

  • send(_:) 메소드를 이용해서 이벤트값을 주입시킬수있는 퍼블리셔
  • 기존의 비동기처리방식에서 Combine으로 전환시 유용함
  • PassthroughSubject - 전달 한값을 들고있지않음
  • CurrentValueSubject - 최근에 가지고있던 값을 전달하고, 그때부터 받은 값을 전달함.
    전달 한값을 들고 있음

@Published(Publisher)

  • @Published 로 선언된 프로퍼티를 퍼블리셔로 만들어줌
  • 클래스에서 사용가능 (구조체X)
  • $ 를 이용해서 퍼블리셔에 접근할수 있음
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

Subscriber

protocol Subscriber{
associatedtype Input
associatedtype Failure : Error

func recevie(subscription: Subscription)
func receive(_ input:Input) -> Subscribers.Demand
func receive(completion: Subscribers.Completion<Failure>)
}
  • Publisher 에게 데이터 요청함
  • Input, Failure 타입 정의필요함
  • Publisher 구독 후 , 갯수를 요청함
  • 파이프라인을 취소할수 있음
profile
계발자

0개의 댓글