Class, Struct, Enum에서 collection, 순열, list, sequence 등 집합의 특정 멤버 요소에 쉽게 접근하기 위한 방법입니다.
이것을 이용하면 추가적인 메소드없이 특정 값을 할당(set)하거나 가져(get)올 수 있습니다.
인스턴스 이름 뒤에 대괄호로 감싼 값을 써줌으로써 인스턴스 내부의 특정 값에 접근할 수 있습니다.
getter, setter ( 접근자, 설정자 ) 메서드를 구성하지 않고도 인덱스를 통해 어떤 값을 빠르게 설정하거나 가져올 수 있습니다.
subscript 내부는 getter, setter의 방식을 따르기 때문
읽고 쓰기 가능
subscript(index: Int) -> Int {
get {
// 적절한 반환 값
}
set(newValue) {
// 적절한 set 액션
}
}
읽기 전용
subscript(index: Int) -> Int {
// 적절한 반환 값
}
서브스크립트를 구현하는 코드
사용 예시
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
// TimesTable구조체의 multiplier를 3으로 설정
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// "six times three is 18" 출력
threeTimesTable[6]에서 6번째 값, 여기서는 3에 6을 곱한 값을 출력합니다
→ subscript의 set에 대한 인자값을 따로 지정하지 않으면 기본 값으로 사용되기때문
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
numberOfLegs값은 타입 추론에 의해 [String: Int]형을 갖습니다. numberOfLegs["bird"] = 2는 사전형 변수 numberOfLegs에 key로 bird를 그 값은 2를 넣으라는 서브스크립트 문법입니다.