someArray[index]
로 Array
인스턴스에 요소를 접근하고 someDictionary[key]
로 Dictionary
인스턴스에 요소를 접근합니다.subscript
키워드로 서브 스크립트 정의를 작성하고 인스턴스 메서드와 같은 방법으로 하나 이상의 입력 파라미터와 반환 타입을 작성합니다. 인스턴스 메서드와 다르게 서브 스크립트는 읽기-쓰기 또는 읽기전용이 될 수 있습니다. 이러한 동작은 계산된 프로퍼티와 같은 방법으로 getter와 setter를 통해 동작합니다:newValue
의 타입은 서브 스크립트의 반환 값과 동일합니다. 계산된 프로퍼티와 마찬가지로 setter의 (newValue)
파라미터를 지정하지 않도록 선택할 수 있습니다. 파라미터를 지정하지 않으면 setter에 newValue
라는 기본 파라미터가 제공됩니다.get
키워드와 그것의 중괄호를 삭제하여 읽기전용 서브 스크립트를 쉽게 선언할 수 있습니다:TimesTable
구조체를 정의하는 읽기전용 서브 스크립트 구현의 예입니다:TimesTable
의 새로운 인스턴스는 3배 테이블을 표시하기 위해 생성됩니다. 인스턴스의 multiplier
파라미터를 사용하는 값으로 구조체의 initializer
에 3
의 값을 전달하여 나타냅니다.threeTimesTable[6]
에 대한 호출에 보여준 것처럼 서브 스크립트를 호출하여 threeTimesTable
인스턴스를 조회할 수 있습니다. 이것은 3
의 6
배인 18
의 값을 반환하는 3배 테이블에서 6번째 값을 요청합니다.NOTE n-배-테이블은 수학적 규칙을 기반으로 합니다.threeTimesTable[someIndex]
를 새로운 값을 설정하는 것은 적절하지 않으므로TimesTable
의 서브 스크립트는 읽기전용 서브 스크립트로 정의됩니다.
Dictionary
타입은 Dictionary
인스턴스에 저장된 값을 설정하고 조회하기 위해 서브 스크립트를 구현합니다. 서브 스크립트 대괄호 내에 딕셔너리의 키 타입의 키를 제공하고 딕셔너리의 값 타입의 값을 서브 스크립트에 할당하여 딕셔너리에 값을 설정할 수 있습니다:numberOfLegs
라는 변수를 정의하고 3개의 키-값 쌍을 포함하는 딕셔너리를 초기화합니다. numberOfLegs
딕셔너리의 타입은 [String: Int]
로 유추됩니다. 딕셔너리가 생성된 후에 이 예제는 딕셔너리에 "bird"
의 String
키와 2
의 Int
값을 추가하기 위해 서브 스크립트 할당을 사용합니다.NOTE Swift의Dictionary
타입은 옵셔널 타입을 가지고 반환하는 서브 스크립트 인 키-값 서브 스크립트를 구현합니다. 위의numberOfLegs
딕셔너리에서 키-값 서브 스크립트는 타입Int?
또는 "옵셔널 int"의 값을 가지고 반환합니다.Dictionary
타입은 모든 키에 값이 있지 않다는 사실을 모델링 하고 키의 값에nil
을 할당하여 키의 값을 삭제하는 방법을 제공하기 위해 옵셔널 서브 스크립트 타입을 사용합니다.
Double
값의 2차 행렬을 나타내는 Matrix
구조체를 정의합니다. Matrix
구조체의 서브 스크립트는 2개의 정수 파라미터를 가집니다:Matrix
는 rows
와 columns
라는 2개의 파라미터를 가지고 Double
타입의 rows * columns
값을 저장할 수 있는 큰 배열을 생성하는 초기화를 제공합니다. 행렬의 각 위치는 0.0
의 초기값이 주어집니다. 이를 위해 배열의 크기와 초기 셀 값 0.0
이 올바른 크기의 새로운 배열을 생성하고 초기화하는 배열 초기화에 전달됩니다. 이러한 초기화는 기본값을 가진 배열 생성 (Creating an Array with a Default Value) 에 자세히 설명되어 있습니다.Matrix
인스턴스를 생성할 수 있습니다:Matrix
인스턴스를 생성합니다. Matrix
인스턴스의 grid
배열은 왼쪽 상단에서 오른쪽 하단으로 읽는 것처럼 행렬의 평면화 버전입니다:row
가 0
이고 column
이 1
)에 1.5
값을 설정하고 좌측 하단 (row
가 1
이고 column
이 0
)에 3.2
값을 설정하기 위해 서브 스크립트의 setter를 호출합니다:Matrix
서브 스크립트의 getter와 setter 둘다 서브 스크립트의 row
와 column
값이 유효한지 판단하기 위해 어설션 (assertion)이 포함됩니다. 어설션을 지원하기 위해 Matrix
는 요청한 row
와 column
이 행렬의 범위안에 있는지를 판단하기 위해 indexIsValid(row:column:)
이라는 편리한 메서드를 포함합니다:subscript
키워드 전에 static
키워드를 작성하여 타입 서브 스크립트를 나타냅니다. 클래스는 하위 클래스가 수퍼 클래스의 서브 스크립트의 구현을 재정의 할 수 있게 대신 class
키워드를 사용할 수 있습니다. 아래 예제는 타입 서브 스크립트를 어떻게 정의하고 호출하는지 보여줍니다: