[Swift] Data advanced(by: Int), dropFirst(k: Int) 비교

곽명섭·2021년 2월 19일
0

Swift-Study

목록 보기
1/2
post-thumbnail

2021년 1월 2일 졸업작품 프로젝트 개발 중 직접 사용하며 발견한 내용...

Data의 advanced(by: Int)와 dropFirst(k: Int)는 객체의 데이터 배열을 앞에서부터 원하는 인덱스까지의 데이터를 제거하여 반환하는 똑같은 동작을 하는 것 같아 보였다...

공식 문서를 참고해보아도

advanced(by:) 설명 :

< Returns a new data buffer created by removing the given number of bytes from the front of the original buffer. >

dropFirst(_:) 설명 :

< Returns a subsequence containing all but the given number of initial elements. >

두 공식 문서의 설명을 읽어보아도 큰 차이를 알 수는 없어보인다...

그러나, 이 두 함수가 둘 다 제공되는 이유는 분명히 있을 것이고, 그걸 찾았다!

임의의 Data 객체 data가 있을 때, (e.g., var data = Data() )

var tempAdvanced = data.advanced(by: n)는 Sliced Array( tempAdvanced )가 0부터 인덱스가 시작된다.

예를 들어 data.count가 N이었다면(N개의 데이터), tempAdvanced.count는 N - n 이고, 인덱스는 0으로 시작한다.

var tempDropFirst = data.dropFirst(k: n)는 Sliced Array( tempDropFirst )가 n부터 인덱스가 시작된다.

똑같이, data.count가 N일 때, tempDropFirst.count는 k - n 으로 advanced(by:) 와 동일하지만,

큰 차이점이 바로, 인덱스가 n부터 시작한다는 것이다!

바이트 배열을 다룰 일이 있었는데, 처음에는 아무런 차이가 없어 보여 이것저것 테스트하며 확인해본 결과, 이런 차이가 있었다.

따라서 기존 data 객체의 배열에서 사용한 데이터까지의 인덱스가 필요하다거나 할 때는 dropFirst(_:)를 사용하고,

한번 사용하여 제거한 데이터의 인덱스나 길이 같은 정보가 필요 없다면 advanced(by:) 함수를 사용하면 될 것 같다.

나의 경우에는 한번 사용한 데이터는 저장을 하기 때문에 advanced(by:) 함수를 사용했다!

추가 : 다시 보니 dropFirst(_:) 함수 설명이 답을 주는 것 같기는 한데... 그래도 나는 시행착오를 통해 배운 것이 있으므로 남겨두기로...

advanced(by:) 공식 문서 : developer.apple.com/documentation/foundation/data/1780445-dropfirst

dropFirst(_:) 공식 문서 : developer.apple.com/documentation/foundation/data/2832722-advanced

출처 : 내 Tistory 블로그
https://youngdeveloper.tistory.com/65

profile
광운컴소!

0개의 댓글