1. withLatestFrom

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

Untitled

마지막 이벤트를 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

2. Sample

withLatestFrom 과 비슷 하지만 textField가 앞에 오고 한번만 emit됨

Untitled

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

3. switches

subscriber가 어떤 sequence의 이벤트를 수신할지 결정함.

3-1) amb(ambigous) : 먼저온 sequnce만 구독

Untitled

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. sequence 내의 요소들간의 결합

4-1) reduce

swift 고차함수 reduce와 동일함.