특정 시점에서 Observable들을 받아드려야 할때 사용함.

마지막 이벤트를 trigger Observalbe이 발생하면 방출 하는듯하다.
example(of: "withLatestFrom") {
let button = PublishSubject<Void>()
let textField = PublishSubject<String>()
button.withLatestFrom(textField).subscribe(onNext:{
print($0)
})
textField.onNext("App")
textField.onNext("Appl")
textField.onNext("Apple")
button.onNext(())
textField.onNext("AppleK")
button.onNext(())
}
--- Example of:withLatestFrom---
Apple
AppleK
withLatestFrom 과 비슷 하지만 textField가 앞에 오고 한번만 emit됨

example(of: "sample") {
let button = PublishSubject<Void>()
let textField = PublishSubject<String>()
textField.sample(button).subscribe(
onNext:{print($0)}
)
textField.onNext("App")
textField.onNext("Appl")
textField.onNext("Apple")
button.onNext(())
button.onNext(())
textField.onNext("AppleK")
button.onNext(())
}
--- Example of:sample---
Apple
AppleK
subscriber가 어떤 sequence의 이벤트를 수신할지 결정함.
3-1) amb(ambigous) : 먼저온 sequnce만 구독

example(of: "amb") {
let left = PublishSubject<String>()
let right = PublishSubject<String>()
left.amb(right).subscribe(onNext:{print($0)})
// 2
left.onNext("Lisbon")
right.onNext("Copenhagen")
left.onNext("London")
left.onNext("Madrid")
right.onNext("Vienna")
left.onCompleted()
right.onCompleted()
}
/*
--- Example of:amb---
Lisbon
London
Madrid
*/
3-2) switchLatest
example(of: "switchLatest") {
let one = PublishSubject<String>()
let two = PublishSubject<String>()
let three = PublishSubject<String>()
let source = PublishSubject<Observable<String>>()
source.switchLatest()
.subscribe(onNext:{
print($0)
}).disposed(by: disposeBag)
//3
source.onNext(one)//1번선택
one.onNext("Some Text from sequence one")
two.onNext("Some Text from sequence two")
source.onNext(two)//2선택
two.onNext("More Text from sequence two")
one.onNext("and also from sequence one")
source.onNext(three)/3선택
two.onNext("why don't you see me?")
one.onNext("I'm alone, help me")
three.onNext("Hey it's Three i win")
source.onNext(one)//다시 1
one.onNext("Nope, It's me, One!")
}
/*
--- Example of:switchLatest---
Some Text from sequence one
More Text from sequence two
Hey it's Three i win
Nope, It's me, One!
*/
4-1) reduce
swift 고차함수 reduce와 동일함.