1. 개요
- 오퍼레이터는 다양한데 이를 그림으로 볼 수 있는 사이트가 RxSwift의 Document와 rxmarbles 등의 사이트들이 있다
- http://reactivex.io/documentation/operators/first.html
- Stream, Next, Complete, Error로 구분
1) first
- 동그란 것은 next, 화살표 선은 Stream, 마지막을 나타내는 세로 선( | ) 은 complete를 나타낸다
- 여기에는 없지만 x는 error를 나타낸다
2. 코드에서 적용되는 방법
- Observable에서 다른 함수들은 Stream을 반환하지만 subscribe는 Disposable을 반환한다.
- subscribe에서는 event를 반환하는 함수를 갖게되고 이는 next, complted, error의 형태를 나타낸다.
- 이를 이용하여 아래와 같이 각자에 맞게 처리해주고 disposeBag을 저장한다.
- 주의사항으로는 completed에서만 처리하는 것이 아니라 error에서 마무리 작업들을 수행해야한다는 것이다.( ex. 프로그레스바 )
Observable.from(["RxSwift", "In", "4", "Hours"])
.subscribe { (event) in
switch event{
case .next(let str):
print("next: \(str)")
break
case .completed:
print("completed")
break
case .error(let error):
print("error: \(error.localizedDescription)")
break
}
}
.disposed(by: disposeBag)
3. 코드 줄이기
- 원하는 상태만 처리해주는 것도 지원한다.
- 아래에서 원하는 핸들러만 구현해도 된다.
- 이 함수에서는 onDisposed 핸들러를 지원하기 때문에 위의 finalize를 여기서 구현하면 된다
Observable.from(["RxSwift", "In", "4", "Hours"])
.subscribe(onNext: { (str) in
print("next: \(str)")
}, onError: { (error) in
print("error: \(error)")
}, onCompleted: {
print("onCompleted")
}, onDisposed: {
print("onDisposed")
})
.disposed(by: disposeBag)
- onNext에 들어가는 것은 함수이기 때문에 별도로 만들고 더 간결하게 정리할 수 있다.
func output(_ result:Any) -> Void{
print(result)
}
@IBAction func exJust2() {
Observable.from(["RxSwift", "In", "4", "Hours"])
.subscribe(onNext: output)
.disposed(by: disposeBag)
}
'앱 개발자 역량 > IOS' 카테고리의 다른 글
RxSwift ] 6. UI에 적용하기 (0) | 2019.07.22 |
---|---|
RxSwift ] 5. Scheduler, Side Effect (0) | 2019.07.19 |
RxSwift ] 3. Operator (0) | 2019.07.13 |
RxSwift ] 2. Disposable (0) | 2019.07.13 |
RxSwift ] 1. 개요 및 Observable (0) | 2019.07.13 |