1. 서브스크립트란?

클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로,

단일 타입에 여러 서브스크립트를 정의할 수 있다

정의를 보면 어떤 말인지 잘 모르겠지만, 가장 중요한 서브스크립트의 특징은

설정과 검색을 위한 별도의 메서드 없이 인덱스로 값을 설정하고 조회할 수 있다는 것이다!

용어는 익숙치 않겠지만 우리는 알게 모르게 서브스크립트 문법을 사용하고 있었다. 아래 예시를 살펴보자. 배열의 요소에 인덱스로 접근하기 위해 사용하는 대괄호([ ]) → 서브스크립트 구문임! 딕셔너리에서 키 값으로 접근하기 위해 사용하는 대괄호([ ]) → 이것도 서브스크립트 구문임!!

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

Untitled

Untitled

1-1. 서브스크립트 정의

연산 프로퍼티랑 굉장히 비슷하고 실제 연산 프로퍼티와 get/set의 성질이 비슷하다

subscript(index: Int) -> Int {
    get {
    }
    set(newValue) {
    }
}

1-2. 서브스크립트 사용

만약 내가 String의 index에 접근을 하고 싶으면 아래와 같은 에러를 발생시킨다. 우리는 여기서 서브스크립트를 확장함으로 이 문제를 해결할 수 있다.

let hidi = "Hello, Hidi!"
hidi[0] // 'subscript(_:)' is unavailable: cannot subscript String with an Int, 
				//. use a String.Index instead.