Swift Combine
* 이글은 Swift 5 기준으로 작성했다.
비동기 작업을 Combine Puslisher 로 만들고 싶다면 어떻게 만들어야 할까?
아주 좋은 예제인 Alamofire 의 Publisher 를 살펴보자
아래 코드는 위코드를 참고로 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