[swift] 중첩된 옵저버블과의 작업 처리 방법
옵저버블은 RxSwift에서 매우 중요한 개념입니다. 이는 비동기 작업을 처리하고 그 결과를 관찰하는데 사용됩니다. 중첩된 옵저버블은 옵저버블 내에 또 다른 옵저버블이 있는 경우를 의미합니다. 이러한 상황에서는 어떻게 작업을 처리하고 결과를 추출할 수 있는지 알아보겠습니다.
중첩된 옵저버블 처리하기
중첩된 옵저버블을 다루기 위해서는 flatMap
연산자를 사용할 수 있습니다. flatMap
은 옵저버블 내부의 각 요소에 대해 새로운 옵저버블을 생성하는 함수를 적용하고, 생성된 모든 옵저버블에 대한 이벤트를 하나의 옵저버블로 합쳐줍니다.
let outerObservable = Observable.just(1)
let innerObservable = Observable.just("A")
outerObservable
.flatMap { outerValue in
innerObservable.map { innerValue in
return "\(outerValue) \(innerValue)"
}
}
.subscribe { result in
print(result)
}
위의 예제는 outerObservable
에 대한 각 이벤트마다 innerObservable
의 값과 합치는 동작을 수행합니다. 결과적으로 출력은 다음과 같을 것입니다.
next("1 A")
completed
중첩된 옵저버블의 결과 추출하기
위의 예제에서는 중첩된 옵저버블의 결과를 문자열로 합쳐서 출력하기로 했습니다. 하지만 때로는 중첩된 옵저버블의 결과를 추출하여 작업을 진행해야 할 수도 있습니다. 이를 위해서는 flatMap
의 반환값을 Observable
이 아닌 다른 유형으로 변경하면 됩니다.
let outerObservable = Observable.just(1)
let innerObservable = Observable.just(2)
let result = outerObservable
.flatMap { outerValue in
innerObservable.map { innerValue in
return outerValue + innerValue
}
}
result.subscribe { value in
print("The result is \(value)")
}
위의 예제에서는 outerObservable
의 값을 innerObservable
의 값과 더해주는 연산을 수행하였습니다. 결과적으로 출력은 다음과 같을 것입니다.
The result is 3
결론
중첩된 옵저버블을 다루기 위해서는 flatMap
연산자를 사용하여 내부 옵저버블의 결과를 추출하거나 연산할 수 있습니다. 이를 통해 비동기 작업을 조합하고 강력한 RxSwift의 기능을 활용할 수 있습니다.
참조: