티스토리 뷰

반응형

 

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

오늘은..벌써 7번째..!!

오늘도 쉬워서 얼른 공부해볼거에요.

이전 시리즈들은 여기서 확인해주세요

 

그럼 시작할게요!

first() last()

first(where:) / last(where:)

tryFirst(where:) tryLast(where:)

output(at:)

output(in:)

 

output을 제외한 친구들은 첫번째냐 마지막이냐만 달라서...같이 볼게요.

 

first() / last()

이 친구는 스트림의 첫번째/마지막 요소를 publish한 다음 끝나는 operator입니다.

만약 first/last가 요소를 받기전에 업스트림이 완료되면 값을 publish하지 않고 완료됩니다.

응 갸쉬워

 

first(where:) / last(where:)

where안에 들어간 closure를 만족하는 첫번째/마지막 요소를 publish한 다음 끝나는 친구입니다.

처음으로 0보다 커지는게 1이니까..1을 publish하고 끝나는거죠. 

 

tryFirst(where:) / tryLast(where:)

에러를 낼 수 있는 closure가 들어가게 됩니다.

range가 -1 ~ 50인데, 요소가 99보다 작은 것만 guard문을 통과할 수 있습니다. 

첫 요소인 -1부터 tryFirst에서 바로 넘어가 버리므로 결과는 -1, finished가 나오게 됩니다.

만약 범위가 100...200이라면 guard문을 통과하지 못하고 RangeError가 나게 되고 스트림이 오류로 인해 실패로 끝나게 됩니다.

참고 : tryFirst, tryLast가 배열의 첫번째/마지막만 쏙 빼내서 주는게 아닙니다. 전부 검사합니다. 왜냐면 where closure를 만족하는 first/last를 주는것이므로. 다 검사해야함. 

 

output(at:)

index를 파라미터로 받는데요, 이 받은 index에 위치한 요소를 publish합니다. 

스트림에서 특정 위치에 있는 특정 요소를 다시 publish해야 할 경우에 이 output을 사용하면 됩니다. 

5번째 요소를 보내줘!

당연히 index는 0부터 시작하므로 6이 리턴되게 됩니다.

 

output(in:)

이 친구는 index가 아니라 range를 받습니다.

특정 range안에 있는 요소들을 다시 publish하고 싶다면 이친구를 사용하면 됩니다. 

들어가는 타입은 RangeExpression 프로토콜을 conform하면 되고,

이런 친구들이 있습니다.

3과 5사이에 있는 친구들을 리턴해줘..물론 closed range를 넘겼기 때문에..

3과 5도 포함입니다.

그래서 2, 2, 3이 나온것을 볼 수 있져ㅛ

반응형
댓글
댓글쓰기 폼
반응형
Total
3,825,390
Today
823
Yesterday
2,840