[Swift] : subscript로 String에 접근 할 수 없는 이유
subscript로 String에 접근 할 수 없는 이유를 알아보기 위해 subscript에 대해 알아보자!
var intArr = [1, 2, 3]
intArr[0] // 1
위의 예시처럼 intArr[int] 같이 배열에서 Key 값을 사용하여 Value에 접근해 줄 수 있게 해주는 것이 바로 subscript이다!
이제 swift 에서 String은 subscript[int]로 접근할 수 없는 이유에 대해 알아보자
var intArr = [1, 2, 3]
var string = "abc"
intArr[0] // 1
string[0] // error!!!!
위처럼 코드를 작성했다면 오류가 발생했을 것이다.
왜일까? 공식문서에서 String 을 봐보자!
문서에 따르면 String은 유니코드로 이루어진 배열이기 때문이다
유니코드는 크기가 정해져있지 않기 때문에 Int로 접근할 수 없는 것이다.
무슨 말인지 이해해보자!
일반적인 배열일 경우를 살펴보자
var intArr = [100]
print(intArr) // [100]
intArr.forEach {
print($0) // 100
}
위처럼 배열 전체를 출력해도 100 이 , 각각의 원소를 출력해도 100 이 하나씩 출력 될 것이다
또 다른 경우를 살펴보자.
String은 unicode의 배열이기 때문에 아래처럼 확인해보자.
var string = "a"
print(string.unicodeScalars) //a
string.unicodeScalars.forEach {
print($0) //a
}
위처럼 배열 전체를 출력해도 a 가 , 각각의 원소를 출력해도 a 가 하나씩 출력 될 것이다.
String 의 또 다른 경우를 살펴봐보자
var string = "👨👨👧👧"
print(string.unicodeScalars)
string.unicodeScalars.forEach {
print($0)
}
이번에는 하나의 문자열을 넣어줬는데도 각각 출력해보니 4개의 문자가 나왔다.
이렇게 하나의 문자값이 4개의 문자값 크기를 가질 수도 있는 것이 String이다.
이러한 이유 때문에 subscript 로 쉽게 접근할 수 없는 것이다!
하지만 String에도 index Key 값으로 Value에 접근할 수 있는 방법이 있다.
바로 String.index 를 사용하는 것이다. 사용법을 알아보자!
//일반적인 배열
var 일반적인배열 = [1, 2, 3]
print(일반적인배열[0])
//String 값 접근하기
var testString = "abcdef"
// 원하는Index는 Int값이다.
let 원하는Index = 0
let indexKey = testString.index( testString.startIndex , offsetBy: 원하는Index )
//indexKey 값을 사용하여 string 배열에 접근할 수 있다!
print(string[indexKey])
이제 String도 마음대로 접근할 수 있게 되었다