Daeng iOS

[Swift] prefix(_:)에 대하여.. 본문

IOS/Swift

[Swift] prefix(_:)에 대하여..

U_Daeng 2024. 5. 17. 15:06

문자열을 다룰 때 자주 사용하는 prefix.. 

 

"pre"가 붙는다는 것 부터가 선행자에 대한 내용인 느낌이고 

prefix는 각 파라미터에 따라 다른 동작을하는 메소드 4개가 있다!

 

 

우선 간단히 살펴보고 실제로 어떻게 사용하면되는지 확인해보자

1) prefix(_:)

 

컬렉션의 초기 요소를 포함하는 지정된 최대 길이까지 서브시퀀스를 반환한다 

maxLength 는 반환할 요소의 최대 수로, 0 이상이어야한다.

 

maxLength에 넣어주는 숫자만큼을 처음부터 떼어내는 것 

떼어내고싶은 길이만큼을 파라미터로 보내주면 된다

 

2) prefix(through:) 

 

컬렉션의 시작부터 지정된 위치까지의 서브 시퀀스를 반환한다 

 

position은 결과 서브시퀀스에서 포함할 마지막 인덱스로, 

endIndex 프로퍼티와는 같지 않은 컬렉션의 유효한 인덱스 여야한다 

 

난 이부분에서 "endIndex 프로퍼티와 같지 않은" 이라는 내용이 이해가 안됐다 

마지막 인덱스는 쓰지말라는건가? 하고 endIndex에 대해 찾아봤는데..

 

 공식문서의 설명을 보면 endIndex는 배열의 "끝을 지난" 인덱스로, 유효한 인덱스보다 1 크다!!!

 

예를 들어 배열의 개수가 5개라면 endIndex는 4가 아니라 5!!

배열의 수가 5개면 끝 인덱스는 4지만 

endIndex 프로퍼티는 "끝을 지난" 인덱스이므로 5가 되는 것 

 

 

그래서 endIndex를 위와같이 쓸때는 ..< 이걸 써야한다 

...를 쓰면 당연 아웃오브인덱스 될 것

 

하여튼 다시 Prefix로 돌아가서

이 함수는 주어진 위치까지 포함한 서브 시퀀스를 반환한다 . 

 

파라미터로 넣어주는 position은 개수가아닌 index 이기 때문에

유효한 인덱스 값을 넣어줘야하고, 

2를 넣어준다면 ?

2개 반환 (X)

인덱스 2까지 반환 (O)

 

3) prefix(upTo:)

 

컬렉션의 시작부터 지정된 위치까지의 서브 시퀀스지만, 지정된 위치는 포함하지 않는다 

 

end 파라미터는 결과 서브시퀀스의 "끝을 지나는" 인덱스로, 컬렉션의 유효한 인덱스여야한다.

 

이 함수도 개수가 아닌 인덱스를 넣어줘야 하는건데 

바로 위 함수와 다른 점은 넣어준 파라미터를 포함하냐 안하냐에 차이

 

2를 넣어줬다면 인덱스 0 인덱스 1 자리의 요소까지 반환하겠지?!

 

4) prefix(while:)

 

predicate가 false를 반환하고 나머지 요소를 건너뛸 때까지

초기 요소를 포함하는 서브 시퀀스를 반환한다 

 

predicate는 시퀀스의 요소를 클로저로 가지고,

그 요소가 포함되어야하면 true를,  제외되어야하면 false를 반환한다. 

한번 false를 반환하면 다시 호출되지 않는다 

 

음.. 다시 말해서

파라미터 while에는 조건이 되는 predicate를 클로저로 넣어준다 

그리고 주어진 요소들이 그 predicate 조건에 해당하면 true를, 아니면  false를 반환하는데 

false를 반환하게되면 함수는 다시 호출되지않는다 

그리고 이 함수의 return 값은 서브시퀀스 이기 때문에 

그렇게해서 true인 조건까지 만족하는 요소들이 그대로 반환된다!

 

아래사진은 위에서 확인한 4가지 prefix 함수를 print 해본 것~!

여기서 마지막 print문을 보면 2 이상인 배열이 3만 해당되기 때문에

[3]을 반환하는 것 

 

 

이상,, 끝~

'IOS > Swift' 카테고리의 다른 글

[Swift] zip(_:_:)에 대하여..  (0) 2024.05.22
[Swift] suffix(_:)에 대하여..  (0) 2024.05.17
[Swift] replaceSubrange(_:with:)에 대하여..  (0) 2024.05.16
[Swift] joined(separator:)에 대해..  (0) 2024.05.09
[Swift] 대소문자 변환  (0) 2024.05.08