상세 컨텐츠

본문 제목

Combine. Ch 4. Filtering Operators

TIL/Combine

by box-jeon 2020. 8. 23. 16:16

본문

Filtering Operator에 대해 설명합니다. Upstream Publisher가 방출하는 value를 필요한 것들만 골라서 방출하는 Publisher를 리턴합니다. Closure를 파라미터로 받는 모든 필터 함수는 try로 시작하는 함수들을 각각 갖는데(i.e. filter vs tryFilter), 해당 closure가 error를 throw할 수 있는 부분을 제외하면 동일하게 동작합니다.

 

Filtering Basics

filter(_:)

Upstream의 value 중 closure가 true를 리턴하는 value들을 방출합니다.

removeDuplicates()

Upstream의 value 중 연속적으로 들어오는 중복된 value를 제외합니다. '연속적으로 같은' value를 필터링하기 때문에, [1, 2, 3, 3, 2, 2, 1] 같은 스트림을 가정해보면 [1, 2, 3, 2, 1]을 받게 됩니다.

 

Compacting and ignoring

compactMap(_:)

Upstream의 value 중 closure가 nil을 리턴하는 value들을 제외합니다.

ignoreOutput()

Upstream의 value와 상관없이 upstream의 종료 여부만 전달합니다. Completion.finished와 Completion.failure() event만 받을 수 있습니다.

 

Finding values

first(where:)

Upstream의 value 중 closure가 true를 리턴하는 첫번째 value를 방출합니다. 방출 후 upstream에 대한 subscription을 cancel 시키고, Completion.finished event를 방출합니다. 필요한 value를 얻어낼 때까지만 upstream을 subscription하는 이 같은 operator를 lazy하다고 표현합니다.

last(where:)

Upstream의 value 중 closure가 true를 리턴하는 마지막 value를 방출합니다. 해당 value가 마지막임을 확인하기 위해서는 upstream의 종료가 필수적이고, upstream의 모든 value를 확인해야하는 이 같은 operator를 greedy하다고 표현합니다.

 

Dropping values

dropFirst(_:)

파라미터로 넘어온 count 수만큼의 upstream value들을 무시합니다. 이후에는 그대로 downstream에 방출합니다.

drop(while:)

Upstream의 value 중 closure가 true를 리턴하는 value들을 무시합니다. False를 리턴하는 value가 나타나면 더이상 closure가 실행되지 않으며, 해당 value부터 그대로 downstream에 방출합니다. filter(while:)과 비슷한 것 같지만, filter(while:)의 경우는 upstream의 모든 value에 대해 계속해서 closure를 실행해서 방출 여부를 판단합니다.

drop(untilOutputFrom:)

파라미터로 전달받은 publisher가 무언가 값을 방출할 때까지 upstream value들을 무시합니다. 파라미터 publisher가 value를 방출한 이후부터는 upstream value를 그대로 downstream에 방출한비다.

 

Limiting values

prefix(_:)

파라미터로 넘어온 count 수만큼의 upstream value를 그대로 방출한 후 종료됩니다. first(_:)와 마찬가지로 lazy operator입니다. Upstream에 대한 subscription이 바로 cancel됩니다.

prefix(while:)

Upstream의 valu 중 closure가 true를 리턴하는 value을 그대로 방출하다가 false를 리턴하는 value가 나타나면 종료됩니다. Upstream에 대한 subscription은 cancel됩니다.

prefix(untilOutputFrom:)

Upstream value를 그대로 방출하다가, 파라미터로 전달받은 publisher가 무언가 값을 방출하면 종료됩니다. Upstream에 대한 subscription은 cancel됩니다.

 

https://store.raywenderlich.com/products/combine-asynchronous-programming-with-swift

 

Combine: Asynchronous Programming with Swift

The best book for learning how to manage declarative asynchronous event handling with the Swift Combine framework!

store.raywenderlich.com

 

'TIL > Combine' 카테고리의 다른 글

Combine. Ch 3. Transforming Operators  (0) 2020.08.17
Combine. Ch 2. Publishers & Subscribers  (0) 2020.05.06
Combine. Ch 1. Hello, Combine!  (0) 2020.04.26

관련글 더보기

댓글 영역