brunch

You can make anything
by writing

C.S.Lewis

by Tilltue Dec 06. 2021

 Custom Publisher 만들기

Swift Combine

* 이글은 Swift 5 기준으로 작성했다.




비동기 작업을 Combine Puslisher 로 만들고 싶다면 어떻게 만들어야 할까?

아주 좋은 예제인 Alamofire 의 Publisher 를 살펴보자

https://github.com/Alamofire/Alamofire/blob/e0edbf64d4a69327ffb8e0f7cfe4e5a4fe36d124/Source/Combine.swift


아래 코드는 위코드를 참고로 FireStorage  파일 업로드를 위해 만든 publisher .


이 Custom Publisher 는 업로드를 수행하는 업로더 핸들러를 주입받고,

구독이 발생하면 Inner DownStream subscription을 생성하고 그를 subscriber 에게 전달한다.

* DataListner 프로토콜은 구독이 중지되면 업로더에게 전달하기 위한 프로토콜이다.


사용할때에는 FireStorage  업로드 하는 객체를 UploadHander  통해 생성하도록 만들었는데 해당 코드는 분량이 많아서 간단한 타이머로 업로드를 흉내낸 예제를 작성해봤다.


https://gist.github.com/tilltue/1cef4e78ad7f64c8d970693dde5a3172

0.1 ~ 0.9 까지 progress 되다 업로드 완료로 종료하도록 하고 구독이 종료되면 업로드가 중단되는 걸 표현하귀 위해 timer 를 중단시켰다.


사용 예제 1


사용 예제 2 ( Prefix 로 중간에 구독 중단 시킴 )


원하는 결과를 얻었다.


간단한 예제로 원하는 비동기 작업을 Custom Publisher 로 작성해봤다. :D

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari