[RxSwift] Combining 연산자

jinny·2022년 10월 17일
0

RxSwift

목록 보기
8/10
post-thumbnail

StartWith


📚 개념

  • 특정 Sequence의 맨 첫번째에 Element를 추가한다.

✏️ 예시) StartWith 사용방법

// 실행코드
let disposeBag = DisposeBag()

let numbers = Observable.of(2, 3, 4)
let observable = numbers.startWith(1)
observable.subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)
// 결과
1
2
3
4

🏷 참고 사이트






Concat


📚 개념

  • 두 개 이상의 Sequence를 하나로 합친다.
  • 순서는 [ First Sequence → Second Sequence ] 이다.

✏️ 예시) Concat 사용방법

// 실행코드
let disposeBag = DisposeBag()

let first = Observable.of(1, 2, 3)
let second = Observable.of(4, 5, 6)

let observable = Observable.concat([first, second])
observable.subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)
// 결과
1
2
3
4
5
6

🏷 참고 사이트






Merge


📚 개념

  • 두 개 이상의 Sequence를 하나로 합친다.
  • Element의 발생 순서에 따라 순차적으로 발생한다.

✏️ 예시) Merge 사용방법

// 실행코드
let disposeBag = DisposeBag()

let left = PublishSubject<Int>()
let right = PublishSubject<Int>()

let source = Observable.of(left.asObserver(), right.asObserver())
let observable = source.merge()
observable.subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)

left.onNext(5)
left.onNext(3)
right.onNext(2)
right.onNext(1)
left.onNext(99)
// 결과
5
3
2
1
99

🏷 참고 사이트






CombineLatest


📚 개념

  • 특정 두 가지 Sequence를 합치는데 두 가지 모두에서 최소 하나의 값이 들어왔을 때 가장 최신의 값을 가져오는 것이다.

✏️ 예시) CombineLatest 사용방법

// 실행코드
let left = PublishSubject<Int>()
let right = PublishSubject<Int>()

let observable = Observable.combineLatest(left, right, resultSelector: {
    lastLeft, lastRight in
    "\(lastLeft) \(lastRight)" // Observable 타입
})

let disposable = observable.subscribe(onNext: { value in
    print(value)
})

left.onNext(45)
right.onNext(1)
left.onNext(30)
right.onNext(99)
right.onNext(2)
// 결과
45 1
30 1
30 99
30 2

🏷 참고 사이트






WithLatestFrom


📚 개념

  • button.WithLatestFrom(textField)일 때, Click Event Sequence가 발생하면 textFiled에 최종 입력된 글자를 출력한다.

✏️ 예시) WithLatestFrom 사용방법

// 실행코드
let button = PublishSubject<Void>()
let textField = PublishSubject<String>()

let observable = button.withLatestFrom(textField)
let disposable = observable.subscribe(onNext: {
    print($0)
})

textField.onNext("Sw")
textField.onNext("Swif")
textField.onNext("Swift")
textField.onNext("Swift Rocks!")

button.onNext(()) // button Click!
button.onNext(())
// 결과
Swift Rocks!
Swift Rocks!

🏷 참고 사이트






Reduce


📚 개념

  • 초기값, 연산자(+, -, /, %, *) 두 가지 인자를 받는다.
  • 초기값에 Element들을 연산하여 결과를 출력한다.

✏️ 예시) Reduce 사용방법

// 실행코드
let disposeBag = DisposeBag()

let source = Observable.of(1, 2, 3)
source.reduce(0, accumulator: +)
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

// 연산자를 clouser{}로 식을 만들어 사용할 수 있다.
// 연산자 +와 같은 결과
source.reduce(0, accumulator: {
    summary, newValue in // summary: 여태 계산된 값, newValue: 각 요소
    return summary + newValue
}).subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)
// 결과
6
6

🏷 참고 사이트






Scan


📚 개념

  • Reduce와 거의 동일한다.
  • 결과만 return하는 Reduce와 달리 Scan은 모든 과정을 전부 return한다.

✏️ 예시) Scan 사용방법

// 실행코드
let disposeBag = DisposeBag()

let source = Observable.of(1, 2, 3, 5, 6)
source.scan(0, accumulator: +)
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)
// 결과
1
3
6
11
17

🏷 참고 사이트



💥 공부를 위한 정리글이기 때문에 잘못된 부분이 있을 수 있습니다. 💥

profile
우당탕탕 지니

0개의 댓글