1. 개요

- 오퍼레이터는 다양한데 이를 그림으로 볼 수 있는 사이트가 RxSwift의 Document와 rxmarbles 등의 사이트들이 있다

https://rxmarbles.com/ 

- 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

+ Recent posts