먐
[Swift] Subscripts 본문
우리가 collection의 요소에 접근하려 할 때 사용하는 subscript
ex. arr[index]로 array의 요소에 접근하기, dic[key]로 dic의 요소에 접근하기
우리는 이런 subscript를 직접 만들어
사용자 타입의 인스턴스의 요소에 접근할 수 있도록 할 수 있다!
subscript
- subscript 키워드로 subscript를 정의한다.
- 하나 이상의 입력 파라미터와 return 타입 작성해 주기
- read-write, read-only 둘다 가능
subscript(index: Int) -> Int {
get {
// Return an appropriate subscript value here.
}
set(newValue) {
// Perform a suitable setting action here.
}
}
- get
- 적절한 return value 작성
- set
- newValue 를 활용한 계산 수행
example
구구단을 나타내는 구조체 TimesTable을 만들어보자.
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
정의한 subscript 구문에서는
구조체 프로퍼티 multiplier와 index 파라미터의 값의 곱을 return하도록 했다.
let threeTimesTable = TimesTable(multiplier: 3)
print(threeTimesTable[0]) // 0
print(threeTimesTable[1]) // 3
print(threeTimesTable[2]) // 6
print(threeTimesTable[6]) // 18
구조체 인스턴스를 만들어 multiplier로 3을 넣었다.
threeTimesTable의
0번째 요소에 접근하면 3*0 = 0
1번째 요소에 접근하면 3*1 = 3
2번째 요소에 접근하면 3*2 = 6
6번째 요소에 접근하면 3*6 = 18
이처럼 subscript 구문을 사용해서 우리가 직접 만든 타입 인스턴스의 요소에 접근할 수 있다.
subscript options
- subscript는 여러 입력 파라미터를 가질 수 있고, 어떤 타입도 반환할 수 있음
- 가변 파라미터 가능
- 파라미터에 기본값 설정 가능
- in-out 파라미터 불가능
subscript overloading
파라미터와 리턴 타입을 다양하게 작성하여 여러 개의 subscript 구문을 정의할 수 있음
의도에 맞게 subscript 구문을 정의하고 접근하면 된다.
struct Point {
var x: Int
var y: Int
subscript(coordinate: String) -> Int {
return coordinate == "x" ? x : y
}
subscript(index: Int) -> Int {
return index == 0 ? x : y
}
}
var point = Point(x: 3, y: 5)
print(point["x"]) // 3
print(point[0]) // 3
- “x”, 0 둘다로 x 값에 접근할 수 있다
- 상
당히… 요시꼬리한 코드이지만 만들 수 있는 예제가 생각이 안 난다 ㅠ
- 상
type subscripts
타입 프로퍼티, 타입 메서드처럼 타입 자체에서 호출되는 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) // mars
- 하위 클래스에서 재정의하고 싶게 하고 싶다면, static 대신 class 키워드 사용하기
정리 - Subscript
collection의 요소에 접근할 때 사용되는데, subscript로 직접 커스텀하여 우리가 만든 사용자 타입의 요소들에도 접근하게 할 수 있다.
Reference
https://bbiguduk.gitbook.io/swift/language-guide-1/subscripts
'iOS > 문법' 카테고리의 다른 글
[Swift] 캡처, 캡처리스트 (0) | 2024.04.01 |
---|---|
[Swift] Swift의 클로저 (0) | 2024.04.01 |
[Swift] escaping closure (0) | 2024.04.01 |
[Swift] 상속 (0) | 2024.04.01 |
[Swift] Swift의 Class (0) | 2024.04.01 |