[swift] String.Index 는 무엇일까?

🧐 String.Index 타입이란?

스위프트에서는 String 타입의 인덱스를 나타내기 위해서 Int 를 사용하지 않고 String.index 라는 특수한 타입을 사용한다.

그럼 이 값을 인트로 변환할 수는 없는 건가?
할 수 가 없다. 에러가 뜬다.😭

우선 스트링은 heap 에 저장 된다. (WWDC에서 말한 내용이니 이것은 맞다.)
🚨여기서 부터 뇌피셜 주의
String.Index 의 공식 문서를 보면 이 타입이 인스턴스로 var hashValue: Int 를 가지고 있고 메서드로는 func hash(into: inout Hasher) 를 가지고 있다.
추측하기로는 String.Index은 뭔가 우리가 알수 없는 무슨 값을 가지고 있고 그걸 구현되어 있는 해쉬 함수에 넣어보니 어떤 Character 값이 있는지 찾을 수 있었다. 이런 것 같다.

결론적으론 String.Index 타입을 인트로 바꿀순 없다...
Int 로 접근을 원하면, String extension 에 subscript 를 구현해서 사용해야 한다.

swift에서 String

➕ String.Index를 사용하는 아이들

프로퍼티

⚙️ startIndex

var startIndex: String.Index { get }

문자열의 시작 요소 인덱스값

⚙️ endIndex

var endIndex: String.Index { get }

문자열의 마지막 요소 인덱스값

메서드

🛠 index(after i: String.Index)

func index(after i: String.Index) -> String.Index

주어진 인덱스 값의 바로 다음 인덱스를 리턴하는 메서드

🛠 index(before i: String.Index)

func index(before i: String.Index) -> String.Index

주어진 인덱스 값의 바로 전 인덱스를 리턴하는 메서드

🛠 index(_ i: String.Index, offsetBy n: String.IndexDistance)

func index(_ i: String.Index, offsetBy n: String.IndexDistance) -> String.Index

주어진 인덱스(i) 에서 offsetBy 만큼 떨어진 인덱스의 값을 리턴하는 메서드

🛠 index(_ i: String.Index, offsetBy n: String.IndexDistance, limitedBy limit: String.Index)

func index(_ i: String.Index, offsetBy n: String.IndexDistance, limitedBy limit: String.Index) -> String.Index?

주어진 인덱스(i) 에서 offsetBy 만큼 떨어진 인덱스의 값을 리턴하지만, limit를 걸어주어서 limit값을 넘는 인덱스에 접근하려고 하면 nil 을 반환.

🛠 firstIndex(of element: Character)

func firstIndex(of element: Character) -> String.Index?

앞에서 부터 검사했을 때 element 의 처음으로 만족하는 인덱스 값 리턴

🛠 lastIndex(of element: Character)

func lastIndex(of element: Character) -> Index?

뒤에서 부터 검사했을 때 element 의 처음으로 만족하는 인덱스 값 리턴


잘못된 정보가 있으면 알려주세요!

좋은 웹페이지 즐겨찾기