IOS
[IOS] RxSwfit 사용하기
Xmobile
2021. 1. 4. 14:57
https://github.com/ReactiveX/RxSwift
RxSwift는 Swfit로 작성된 반응형 익스텐션 버전입니다.
Observable을 만들어 스트림에서 값 및 기타 이벤트를 구독하여 로직을 분리시킬 수 있고
비동기 및 함수적 스타일 연산자를 사용하여 를 사용하여 데이터를 참조하는 방법을 제공합니다.
1. pod 설정
pod 'RxSwift', '6.0.0-rc.2'
pod 'RxCocoa', '6.0.0-rc.2'
2. Observable 만들기
static func fetchLotto(_ order: Int) -> Observable<Lotto?> {
return Observable.create() { emitter in
let url = URL(string: domainUrlString + "?order=" + String(order))!
let task = session.dataTask(with: url, completionHandler: { (data: Data?, response: URLResponse?, err: Error?) -> Void in
guard err == nil else {
emitter.onError(err!)
return
}
let lottoDto = try? JSONDecoder().decode(Lotto.self, from: data!)
emitter.onNext(lottoDto)
})
task.resume()
return Disposables.create(){
task.cancel()
}
}
}
3. subscribe 사용하기
let observable = APIService.fetchLotto(order)
_ = observable
.observe(on: MainScheduler.instance)
.subscribe(onNext: {
self.lotto = $0
self.viewUpdate()
})
.disposed(by: disposeBag)
옵저버블은 3가지 이벤트를 방출합니다.
public enum Event<Element> {
case next(Element) //정상
case error(Swfit.Error) //에러
case completed //완료
}
4. 마무리
위와 같이 행위를 Api를 Observable을 만들고 사용하는 쪽에서 Observable을 return받아 사용할 수 있습니다.
이와 같은 장점은 디자인 아키텍쳐 측면에서 비즈니스 로직을 분리하고 테스트를 별도로 할 수 있고
비동기 행위들을 Observable을 만들어 사용하는 쪽에서 일과된 코드를 유지할 수 있으며
MVVM구조와 같은 구조에서 화면에서는 ViewModel 데이터에만 집중할 수 있는 장점으로 활용할 수 있습니다.