728x90
RxSwift는 강력한 방식으로 여러 Observable 스트림을 결합, 병합 및 동기화 할 수 있는 풍부한 결합 연산자 세트를 제공합니다 . 이러한 연산자는 복잡한 데이터 상호 작용 및 종속성을 처리하는 반응형 애플리케이션을 구축하는 데 필수적입니다. RxSwift 결합 연산자를 사용하는 방법에 대한 몇 가지 실제적인 예를 살펴보겠습니다.
1. 관찰 가능한 스트림 병합:
- 문제: 여러 개의 Observable 스트림을 단일 스트림으로 결합하고, 각 스트림에서 동시에 항목을 방출합니다.
- 해결책: 연산자를 사용하여 merge여러 Observable 스트림을 결합하면 각 스트림의 항목이 섞이지 않고 내보내질 수 있습니다.
import RxSwift
let numbersObservable1 = Observable.of(1, 2, 3)
let numbersObservable2 = Observable.of(4, 5, 6)
let numbersObservable3 = Observable.of(7, 8, 9)
let mergedObservable = Observable.merge(numbersObservable1, numbersObservable2, numbersObservable3)
mergedObservable.subscribe(onNext: { number in
print("Received number: \(number)")
})
- 설명:
숫자 시퀀스를 각각 방출하는 세 개의 Observable 스트림을 생성합니다 .
세 개의 스트림을 하나의 스트림으로 결합하는 데 사용됩니다 .merge
병합된 스트림을 구독하고 받은 각 번호를 인쇄하세요.
2. 여러 스트림의 최신 값 결합:
- 문제: 여러 Observable 스트림의 최신 값을 단일 스트림으로 결합하고, 스트림 중 하나에서 새 값이 방출될 때마다 이를 방출합니다.
- 해결책: 연산자를 사용하여 combineLatest여러 스트림의 최신 값을 결합하고, 입력 스트림 중 하나에서 새 값이 나올 때마다 새 값을 내보냅니다.
import RxSwift
let nameTextField = UITextField()
let ageTextField = UITextField()
let nameObservable = nameTextField.rx.text.map { $0 ?? "" }
let ageObservable = ageTextField.rx.text.map { $0 ?? "0" }
let combinedObservable = nameObservable
.combineLatest(with: ageObservable) { name, age in
"\(name) is \(age) years old"
}
combinedObservable.subscribe(onNext: { message in
print(message)
// Update UI with the combined message
})
- 설명:
이름과 나이 텍스트 필드의 텍스트 입력에 대한 Observable을 만듭니다.
combineLatest두 스트림의 최신 값을 결합하여 두 스트림 중 하나에서 새 값이 나올 때마다 새 문자열을 생성하는 데 사용됩니다 .
결합 스트림을 구독하고 결합된 메시지를 인쇄하세요.
3. 일치하는 요소로 여러 스트림 압축:
- 문제: 해당 시간에 방출되는 여러 Observable 스트림의 요소를 결합하여 튜플로 묶습니다.
- 해결책: 연산자를 사용하여 zip해당 시간에 방출되는 여러 스트림의 요소를 결합하여 쌍을 이룬 요소의 튜플을 생성합니다.
import RxSwift
let numbersObservable = Observable.of(1, 2, 3)
let charactersObservable = Observable.of("A", "B", "C")
let zippedObservable = numbersObservable.zip(with: charactersObservable) { number, character in
"\(number) - \(character)"
}
zippedObservable.subscribe(onNext: { pair in
print(pair)
})
- 설명:
숫자와 문자에 대한 Observable을 만듭니다.
zip두 스트림의 요소를 결합하여 일치하는 각 쌍에 대한 문자열을 방출하는 데 사용됩니다 .
압축 스트림을 구독하고 각 쌍을 인쇄하세요.
4. 타이머 또는 트리거로 스트림 사용:
- 문제: 하나의 Observable 스트림을 사용해 다른 스트림에서 항목이 방출됨에 따라 작업을 트리거하거나 값을 방출합니다.
- 해결 방법: , , 또는 연산자를 사용하여 다른 스트림에서 항목이 방출됨에 따라 작업을 트리거하거나 값을 방출합니다.withLatestFrom startWithsample
import RxSwift
let buttonTaps = button.rx.tap
let randomNumbers = Observable.create { observer in
// Simulate a random number generator
while true {
observer.onNext(Random.shared.nextInt(in: 1...100))
Thread.sleep(forTimeInterval: 0.5)
}
}
let filteredNumbers = buttonTaps
.withLatestFrom(randomNumbers) { tap, number in
number % 2 == 0 ? number : -1
}
.filter { $0 >= 0 }
filteredNumbers.subscribe(onNext: { number in
print("Filtered number: \(number)")
})
- 설명:
버튼 탭과 난수에 대한 Observable을 만듭니다.
withLatestFrom각 버튼을 탭할 때마다 최신 난수를 결합하여 필터링하는 데 사용합니다 .
'개발' 카테고리의 다른 글
RxSwift로 로그인 로직 만들기 (0) | 2024.07.09 |
---|---|
RxSwift Share Operators (0) | 2024.07.09 |
RxSwift Transforming Operators (0) | 2024.07.09 |
RxSwift Filtering Operators (0) | 2024.07.09 |
RxSwift Observables and Subjects (0) | 2024.07.09 |