Rx를 이용해서 개발하면서
Combine할때 유용한 Operator를 소개할게요
제 주관적으로 자주쓰이는것을 골라봤어요
Combine Operator는
말그대로 서로다른 스트림을 하나의 스트림으로 합쳐서 사용할 때
유용하게 쓰일거에요
CombineLatest
최초 두개의 스트림에서 각각 하나씩 이벤트를 받아온 뒤부터
두개의 스트림중 한쪽에서만 이벤트가 발생해도
새로운 스트림에 이벤트를 받아올 수 있음
그림이 이해가시나요?
처음보면 어려울수도있어요
숫자스트림과 알파벳스트림
이렇게 2개의 스트림이 존재하구요
숫자스트림은 1, 2, 3, 5 이벤트를
알파벳스트림은 A, B, C, D이벤트를 발생하죠?
처음에는 두스트림에 모든 이벤트가 있어야
새로운 스트림에 이벤트가 들어와요
1과 A가 차례대로들어오면 그때
새로운 스트림에 1A이벤트가 적용되서 내려오는거에요
다음에는 숫자스트림에 2가들어오네요
숫자스트림: 1
알파벳스트림: A
새로운스트림: 1A
상태에서
숫자스트림: 2
알파벳스트림: A
새로운스트림: 2A
상태가 됬어요
느낌이오시나요?
다음에는 알파벳스트림에 B가 들어오면
현재 숫자스트림은 2니까
새로운 스트림에는 2B가 나오겠네요
이런 느낌으로 두개이상의 스트림의 상태를 관찰하면서
하나의 스트림에서라도 이벤트가 생기면 모든 스트림의 이벤트(2, B)에 접근할 수 있고
그 스트림들의 이벤트를 이용해서 원하는 작업을 하면돼요
Merge
Merge는 단어에서 볼 수 있듯이 두개의 스트림을 합쳐주는 연산자에요
스트림을 합쳐서 하나의 스트림으로 만들어 줘요
이벤트 두개가 모두 들어올 때까지 기다리지않고 바로바로 하나씩 보내줘요
각 스트림에 이벤트가 올때마다 바로바로 내려보내주는 역할이에요
이 연산자는 각스트림의 이벤트에 접근할 수 없고
그냥 바로 반환되고 새로운 스트림을 만들어줘요
따라서 스트림을 구분할 수 없고 스트림으로 차례대로 들어온 이벤트를 처리할 수 있어요
Zip
CombineLastest와 비슷하지만 다른 개념이에요
CombineLastest은 각스트림에서 이벤트가 발생하면 바로 새로운 이벤트가 내려왔지만
Zip은 모든스트림에 같은횟수의 이벤트가 들어올 때 실행돼요
만약 두개의 스트림이있다면
두 스트림에 이벤트가 같은횟수가 들어오면
새로운 스트림으로 나오는거에요
스트림이 비어있는상태에서
숫자스트림에 1이들어왔네요
그러면
Zip은 모든스트림의 이벤트횟수가같아야 생성이되니까
아래와 같겠죠?
숫자스트림: 1
알파벳스트림:
새로운스트림:
이 상태가 되요
그리고 다음으로 알파벳스트림에 A가들어오면
숫자스트림에 1번
알파벳스트림에 1번
같은 횟수가 들어왔으니 새로운스트림에 이벤트가 전달되겠네요
숫자스트림: 1
알파벳스트림: A
새로운스트림: 1A
다음으로 알파벳스트림에 B가들어오면
숫자스트림은 1번째이벤트고
알파벳스트림은 2번째이벤트니까
새로운스트림에는 이벤트가 오지않겠네요
숫자스트림: 1
알파벳스트림: B
새로운스트림: 1A
그다음에 숫자스트림에 2가들어오면
숫자스트림과 알파벳스트림의 이벤트횟수가 같아서
새로운스트림에 2B가 생성되는거에요
'iyOmSd > Title: RxSwift' 카테고리의 다른 글
[RxSwift] Observable, Subject, Relay (0) | 2020.06.27 |
---|---|
[RxSwift] TableView 구현하기 (0) | 2020.06.05 |
[RxSwift] RxDataSources을 이용한 TableView구현하기 (0) | 2020.01.21 |
[RxSwfit 기초] 원의 이동에따른 색변화 시키기 (0) | 2019.08.12 |
[RxSwift 기초] 검색창 결과 바로보기 - 예제로 RxSwift익히기 (0) | 2019.08.06 |