티스토리 뷰
RxSwift로 흐름에 따라 값의 변화에 따라서 처리를 하고 이것을 자연스럽게 합쳐서 사용할 수 있습니다.
이번에는 Combine 할수 있는 함수들을 알아보도록 하겠습니다.
1. combineLatest
1 2 3 4 5 6 7 8 | let first = Observable.of(1, 2, 3, 4) let second = Observable.of(100, 200, 300, 400) Observable.combineLatest(first, second) { first, second -> String in return "\(first), \(second)" }.subscribe(onNext: { text in print("text = \(text)") }).disposed(by: disposeBag) | cs |
마지막으로 들어온 값들을 사용할 수 있도록 하여줍니다.
1 2 3 4 5 6 7 | text = 1, 100 text = 2, 100 text = 2, 200 text = 3, 200 text = 3, 300 text = 4, 300 text = 4, 400 | cs |
이렇게 자신들이 하나씩 방출하면서 마지막 값들을 나오게 하는 겁니다.
2. withLatestFrom
1 2 3 4 5 6 7 | let first = Observable.of(1, 2, 3, 4) let second = Observable.of(100, 200, 300, 400, 500) first.withLatestFrom(second) .subscribe(onNext: { text in print("text = \(text)") }).disposed(by: disposeBag) | cs |
자신이 변화됨에 따라 다른 흐름을 참조하여서 가져오게 됩니다.
1 2 3 4 | text = 100 text = 200 text = 300 text = 400 | cs |
결과값중 왜 500은 나오지 않았을 까요?
이유는 first가 4번만 방출하기 때문에 이 값을 사용할 수 없게 됩니다.
3. merge
1 2 3 4 5 6 7 | let first = Observable.of(1, 2, 3, 4) let second = Observable.of(100, 200, 300, 400, 500) Observable.merge(first, second) .subscribe(onNext: { text in print("text = \(text)") }).disposed(by: disposeBag) | cs |
값들을 하나로 합쳐서 하나의 흐름으로 만들어 줍니다.
1 2 3 4 5 6 7 8 9 | text = 1 text = 100 text = 2 text = 200 text = 3 text = 300 text = 4 text = 400 text = 500 | cs |
차례대로 수루룩하고 나오게 됩니다.
4. switchLatest
1 2 3 4 5 6 7 8 9 10 11 12 13 | let first = PublishSubject<Int>() let second = PublishSubject<Int>() let switchTest = BehaviorSubject(value: first) switchTest .switchLatest() .subscribe(onNext: { number in print("text = \(number)") }).disposed(by: disposeBag) first.onNext(1) switchTest.onNext(second) second.onNext(2) | cs |
위에서 보면 PublishSubject로 하나의 이벤트를 만들수 있는 객체를 두개 만들었습니다. first, second 이것을 가지고 switchTest에서 생성시에 사용을 하도록 지정하였습니다.
이후 12번째 라인에서 이벤트를 방출할수 있는 흐름을 second로 변경을 하였고 이후에는 second의 값에 따라서 switchTest가 동작하게 됩니다.
1 2 | text = 1 text = 2 | cs |
5. zip
1 2 3 4 5 6 7 | let first = Observable.of(1, 2, 3, 4) let second = Observable.of(100, 200, 300, 400, 500) Observable.zip(first, second) .subscribe(onNext: { first, second in print("value = \(first), \(second)") }).disposed(by: disposeBag) | cs |
이건 순서대로 방출된 이벤트를 하나로 묶어줍니다.
같은 순서의 이벤트를 합쳐주는겁니다.
1 2 3 4 | value = 1, 100 value = 2, 200 value = 3, 300 value = 4, 400 | cs |
6. concat
1 2 3 4 5 6 7 | let first = Observable.of(1, 2, 3, 4) let second = Observable.of(100, 200, 300, 400, 500) Observable.concat(first, second) .subscribe(onNext: { number in print("value = \(number)") }).disposed(by: disposeBag) | cs |
두개의 흐름을 하나의 흐름으로 만들어줍니다.
직렬로 연결이 되고 출력은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 | value = 1 value = 2 value = 3 value = 4 value = 100 value = 200 value = 300 value = 400 value = 500 | cs |
'Mobile > iOS' 카테고리의 다른 글
Swift. reflection. (0) | 2018.06.24 |
---|---|
Swift. Custom ViewController Transition. Present (0) | 2018.06.24 |
RxSwift. Transforming Observable (0) | 2018.06.19 |
Swift. Codable Encoding (1) (0) | 2018.06.17 |
Swift. Codable Decoding (1) (0) | 2018.06.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- MySQL
- windows10
- android
- Codable
- SWIFT
- tomcat
- Kotlin
- golang
- Windows
- intellij
- centos8
- git
- rxswift
- cocoapods
- war
- nodejs
- Linux
- ios
- github
- go
- CentOS
- Gradle
- Java
- Xcode
- php
- Python
- enum
- ubuntu
- Spring
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함