클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로,
단일 타입에 여러 서브스크립트를 정의할 수 있다
정의를 보면 어떤 말인지 잘 모르겠지만, 가장 중요한 서브스크립트의 특징은
설정과 검색을 위한 별도의 메서드 없이 인덱스로 값을 설정하고 조회할 수 있다는 것이다!
용어는 익숙치 않겠지만 우리는 알게 모르게 서브스크립트 문법을 사용하고 있었다. 아래 예시를 살펴보자. 배열의 요소에 인덱스로 접근하기 위해 사용하는 대괄호([ ]) → 서브스크립트 구문임! 딕셔너리에서 키 값으로 접근하기 위해 사용하는 대괄호([ ]) → 이것도 서브스크립트 구문임!!
let nums: [Int] = [1, 2, 3, 4]
nums[0] // 1
nums[1] // 2
let dict: [String: Int] = ["one": 1, "two": 2]
dict["one"] // 1
dict["two"] // 2
연산 프로퍼티랑 굉장히 비슷하고 실제 연산 프로퍼티와 get/set의 성질이 비슷하다
subscript(index: Int) -> Int {
get {
}
set(newValue) {
}
}
만약 내가 String의 index에 접근을 하고 싶으면 아래와 같은 에러를 발생시킨다. 우리는 여기서 서브스크립트를 확장함으로 이 문제를 해결할 수 있다.
let hidi = "Hello, Hidi!"
hidi[0] // 'subscript(_:)' is unavailable: cannot subscript String with an Int,
//. use a String.Index instead.