Table of contents
🧐 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 의 처음으로 만족하는 인덱스 값 리턴
잘못된 정보가 있으면 알려주세요!