- 각 elements를 하나의 배열에 담는다.
// 실행코드
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
.toArray()
.subscribe({
print($0)
}).disposed(by: disposeBag)
// 결과
success([1, 2, 3, 4, 5, 6])
- 각 elements에 어떤 연산을 하고, 해당 연산의 결과를 return한다.
// 실행코드
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
.map { return $0 * 2 }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
// 결과
2
4
6
8
10
12
- struct와 같은 자료형에서 자료형 전체를 subscribe 하는게 아니라, 특정 멤버에 대해 subscribe 한다.
- accept() 시, onNext()가 자동으로 호출된다.
- 2차원 배열을 1차원 배열로 return한다. (평평한 배열 return)
// 실행코드
let disposeBag = DisposeBag()
struct Student {
var score: BehaviorRelay<Int> // subscribe 가능한 자료형
}
let Harray = Student(score: BehaviorRelay(value: 90))
let Jinny = Student(score: BehaviorRelay(value: 70))
let student = PublishSubject<Student>()
student.asObservable()
.flatMap() { $0.score.asObservable() }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
print("--Harray--")
student.onNext(Harray)
Harray.score.accept(100)
print("--Jinny--")
student.onNext(Jinny)
Jinny.score.accept(99)
print("--Harry_again--") /* student.onNext(Jinny) 호출 후에도
Harray의 값이 변경되면 onNext() 자동 호출 */
Harray.score.accept(95)
// 결과
--Harray--
90
100
--Jinny--
70
99
--Harry_again--
95
- FlatMap과 유사하지만, onNext() 한번의 호출 이후 값이 변경되었을 시에 onNext()가 자동으로 호출되지 않는 차이점이 있다.
// 실행코드
let disposeBag = DisposeBag()
struct Student {
var score: BehaviorRelay<Int> // subscribe 가능한 자료형
}
let Harray = Student(score: BehaviorRelay(value: 90))
let Jinny = Student(score: BehaviorRelay(value: 70))
let student = PublishSubject<Student>()
student.asObservable()
.flatMapLatest() { $0.score.asObservable() }
.subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
print("--Harry--")
student.onNext(Harray)
Harray.score.accept(100)
print("--Jinny--")
student.onNext(Jinny)
Jinny.score.accept(99)
print("--Harry_again--")
Harray.score.accept(0)
student.onNext(Harray)
// 결과
--Harry--
90
100
--Jinny--
70
99
--Harry_again--
💥 공부를 위한 정리글이기 때문에 잘못된 부분이 있을 수 있습니다. 💥