Filtering 카테고리 연산자들은 Publisher로부터 값을 받아서 설정해놓은 조건에 맞는 녀석들만 다운스트림으로 내려보내는 연산자이다. 앞선 transforming 연산자들과 비교했을 때 업스트림으로부터 내려오는 값을 바꾸는 것이 아닌 걸러내는 역할을 수행한다.
먼저 Filter() 연산자가 있다. 가장 단순한 필터 연산자로 원하는 조건에 따라 필터링해서 다운스트림에 내려보낸다.
removeDuplicate() 연산자는 이름 그대로 중복된 값들을 제거해주고 다운스트림에 내려보낸다.
compactMap 은 nil을 필터링한 밸류값을 다운스트림에 전달한다 위코드예시에서 Int값으로 변환이 되지 않은 밸류는 필터링하고 변환된 값만 다운스트림에 내려보내는 것을 알 수 있다.
ignoreOutput() 연산자는 값은 무시하고 작업의 완료나 실패 상태만을 다루고자 할 때 사용된다. 예를 들어 데이터 베이스에 저장하고 나면 값의 여부와 상관없이 데이터 베이스 저장이 성공했다라는 사실을 확인하고 싶을 때 사용할 수 있다.
![](https://blog.kakaocdn.net/dn/whvMD/btsHjwimg7N/sukOoQHcOQVjFuqQCR3ec1/img.png)
![](https://blog.kakaocdn.net/dn/bqUmu1/btsHgWQkBTn/kz2HhPM2YLEsZafPtu1xwk/img.png)
last 연산자는 이름 그대로 마지막 이벤트를 가져온다. 또한 last 연산자는 "greedy" 하다. 이유는 스트림의 마지막 값을 결정하기 위해 upstream publisher로부터 모든 값을 받아야 하기 때문이다. 작업을 수행하기 위해 모든 데이터를 살펴보고, 그 중에서 가장 마지막에 나온 값을 선택하게 된다. first 연산자와 동일하게 마지막 값을 받으면 바로 completion 종료 이벤트를 발생시킨다.
prefix 연산자는 업스트림 시작부분에서 원하는 뭉탱이만큼 이벤트값을 받는다. first와 같이 lazy연산자로써 원하는 값만 가져오면 바로 종료이벤트를 던지고 더이상의 값을 안가져와서 효율적으로 리소스를 처리한다.
drop 연산자는 설정해놓은 조건에 맞는 값이 올 때까지 앞선 업스트림에서 내려온 값들을 모두 드랍시킨다.
https://www.kodeco.com/5429795-reactive-programming-in-ios-with-combine/lessons/11
Reactive Programming in iOS with Combine, Episode 11: Filtering Operators
Basic filtering operators like filter, removeDuplicates, ignoreOutput and compactMap can be used to narrow down which values get sent downstream to subscribers.
www.kodeco.com
'Flutter' 카테고리의 다른 글
| Combine | 5. Combining Operators (0) | 2024.05.11 |
---|---|
Flutter Widget의 작동원리 (0) | 2024.05.10 |
UIView 의 Drawing Cycle (0) | 2024.05.08 |
| Combine | 3. Transforming Operators (0) | 2024.05.08 |
| Combine | 2. Operators and Subjects (0) | 2024.05.07 |