서브 스크립트란?
콜렉션, 목록, 시퀀스 등 집합의 특정 멤버 요소에 접근할 수 있는 단축키
추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있다.
예를 들어, 배열 인스턴스의 특정 엘리먼트는 someArray[index]
, 딕셔너리 인스턴스의 특정 엘리먼트는 someDictionary[key]
로 접근한다.
하나의 타입에 여러 서브 스크립트는 정의할 수 있고 오버로드도 가능하다. 필요에 따라 복수 인자 값을 사용할 수도 있다.
인스턴스 메소드와 계산된 프로퍼티를 선언하는 것과 비슷하지만, 서브 스크립트는 읽고 쓰기(read-write) 혹은 읽기 전용(read only)만 가능하다. 정의는 계산된 프로퍼티 방식과 같이 getter
, setter
방식을 따른다.
서브 스크립트를 사용해 인스턴스 이름 뒤 대괄호에 하나 이상의 값을 작성하여 타입의 인스턴스를 조회할 수 있다.
subscript(index: Int) -> Int {
get {
// 적절한 반환 값 Return an appropriate subscript value here.
}
set(newValue) {
// 적절한 set 액션 Perform a suitable setting action here.
}
}
set
에 대한 인자 값을 지정하지 않으면 기본 값으로newValue
를 사용한다.
get
,set
을 지우고 지정하지 않으면 읽기 전용으로 선언된다.
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
서브 스크립트는 여러 개의 입력 파라미터를 가질 수 있고 어떤 타입이든지 입력과 반환이 가능하다.
서브 스크립트는 오버로딩을 허용한다. 그래서 인자형, 반환형에 따라 원하는 수 만큼의 서브 스크립트를 선언할 수 있다.
인스턴스 서브 스크립트는 특정 타입의 인스턴스를 호출하는 서브 스크립트다.
타입 자체에서 호출되는 서브 스크립트도 정의할 수 있는데, 이런 종류의 서브 스크립트를 타입 서브 스크립트라고 한다.
subscript
키워드 전에 static
키워드를 작성하여 타입 서브 스크립트를 나타낸다.
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
static subscript(n: Int) -> Planet {
return Planet(rawValue: n)!
}
}
let mars = Planet[4]
print(mars)
콜렉션, 리스트, 시퀀스 등 집합의 특정 멤버 요소에 간단하게 접근할 수 있도록 하는 문법이다.
추가적인 메소드 없이 특정 값을 할당하거나 가져올 수 있다.
대괄호 []를 사용
Swift에서 Character
String은 str[0]와 같이 Int로 접근하지 못하고, String.index로 접근해야한다 String는 characters의 모음, 즉 Array
스위프트에서 Character은 1개 이상의 유니코드 스칼라 Unicode Scalar 로 이루어져 있는데 크기가 가변적이다.
참고
https://jusung.gitbook.io/the-swift-language-guide/language-guide/12-subscripts#subscript-options!