티스토리 뷰

반응형

 

안녕하세요 :) Zedd입니다.

원래 이게 5탄이었어야 하는데;;;; 지금 발견함. 

걍 합시다?

 

contains(_:)

contains(where:)

tryContains(where:)

allSatisfy(_:)

tryAllSatisfy(_:)

 

이렇게 5가지만 있어요. 

 

contains(_:)

Swift Standard Library에 있는 것과 똑같습니다.

upstream publisher가 contains의 파라미터인 output과 동일한 값을 생성하면 true를 리턴합니다. 

참고로 첫번째로 일치하는 걸 찾으면 true를 리턴하고 정상적으로 완료됩니다.

하지만 일치하는 요소를 생성하지 않고 upstream이 완료되면 false를 방출하고 종료합니다. 

참고로 파라미터로 들어가는 타입은 Equatable을 준수하고 있어야 합니다. 

 

contains(where:)

where안에 closure가 들어가는데 closure를 만족하는 것을 찾으면 true, 아니면 false를 방출하는 친구입니다. 

요 Operator는 upsteam puplisher가 Equatable를 준수하지 않는 요소를 생성 할 때 유용합니다!

 

tryContains(where:)

contain(where:)와 똑같지만 closure가 에러를 낼 수 있겠네요.

요소를 2로 나눴을 때 나머지가 0이 아니면 Error를 내보내게 했습니다.

처음으로 3이 들어가게 되는데 처음부터@!! 3이니까..2로 나눈 나머지가 0이 아니게 됩니다. 그럼 스트림은 에러와 함께 실패하게 됩니다.

만약 처음 요소가 2라고 해볼게요. 그럼 2로 나눈 나머지가 0이고 10보다 작으니 true가 리턴될테고, 스트림은 정상적으로 끝나게 됩니다.

 

allSatisfy(_:)

다 만족하냐???!?

모든 요소가 넘긴 closure를 만족하는지를 보는 Operator입니다. 모두 만족하면 true, 아니면 false를 리턴합니다.

range가 -1~100인데, numbers배열의 모든 요소가 이 range안에 있냐!?를 검사합니다.

모두 -1과 100사이에 있는 것을 볼 수 있습니다. 

그래서 true가 리턴된 것을 볼 수 있습니다. -1 ~ 100 사이에 있지 않은게 하나라도 numbers배열에 있다면, false를 리턴하게 됩니다.

 

tryAllSatisfy(_:)

에러를 낼 수 있겠구나...

guard문을 봐야겠죠?

upstream에서 요소가 0이 아닌 것만 와야 guard문을 통과 할 수 있씁니다.

그리고 통과한 요소가 전부 -1 ~ 100사이에 있어야만 true를 리턴합니다. 

근데 numbers배열 맨 마지막에 0이 있죠!!!!

guard문을 통과하지 못하게 되고, 에러를 내게 됩니다.

에러로 인해 스트림이 실패로 끝나게 됩니다. 

반응형