GGURUPiOS
Swift 공식 문서 정리 - (12) Subscripts 본문
Subscripts (서브스크립트)
클래스, 구조체 및 열거형은 컬렉션, 리스트, 시퀀스 등 집합의 특정 멤버 엘리먼트에
간단히 접근할 수 있는 문법임.
서브스크립트를 이용하면 추가적인 메소드 없이 특정 값을 할당 하거나 가져올 수 있음
서브스크립트 문법
서브스크립트를 사용하면 인스턴스의 이름 뒤에 대괄호 안에 하나 이상의 값을 작성하여 유형의 인스턴스를 쿼리할 수 있음
해당 구문은 인스턴스 메서드나, 계산된 프로퍼티 구문과 유사
그러나 인스턴스 메서드와 달리 서브스크립트는 읽기-쓰기 또는 읽기 전용일수 있음
subscript(index: Int) -> Int {
get {
// Return an appropriate subscript value here.
}
set(newValue) {
// Perform a suitable setting action here.
}
}
계산된 프로퍼티와 마찬가지로 setter의 매개변수를 지정하지 않도록 선택 가능
기본값 → newValue 제공
읽기 전용 계산된 프로퍼티와 마찬가지로 키워드와 중괄호 제거하여 단순화 할수 있음
subscript(index: Int) -> Int {
// Return an appropriate subscript value here.
}
아래는 예시
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \\(threeTimesTable[6])")
// Prints "six times three is 18"
// 정수의 n 배 테이블을 나타내는 구조를 정의하는 읽기 전용 첨자 구현의 예
서브스크립트 사용
서브스크립트는 일반적으로 컬렉션, 목록 또는 시퀀스의 구성원 요소에 접근하기 위한 바로가기로 사용됨
다음은 딕셔너리에서 서브스크립트의 사용 예시임
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
// 딕셔너리 유형은 검색하는 서브스크립트가 구현되어있음
// 이를 이용해 할당도 가능 함
서브스크립트 옵션
서브스크립트는 입력 인자의 숫자에 제한이 없고, 타입과 반환 타입의 제한도 없음
다만 in-out 인자나 기본 인자 값을 제공할 수는 없음
서브스크립트는 오버로딩도 허용 함
→ 인자형, 반환형에 따라 원하는 수 만큼의 서브스크립트를 선언할 수 있음
아래는 서브스크립트를 이용해 다차원 행렬을 선언하고 접근하는 예시임
struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(repeating: 0.0, count: rows * columns)
}
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValid(row: row, column: column), "Index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValid(row: row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue
}
}
}
// assert? -> 프로그램 바로 종료
위 코드에서는 subscript(row: Int, column: Int) → Double 코드와 같이 두개의 인자를
받고, Double을 반환하는 서브스크립트를 선언함.
'Swift > 공식문서 정리 ( 문법 )' 카테고리의 다른 글
Swift 공식 문서 정리 - (15) Deinitialization (0) | 2023.04.28 |
---|---|
Swift 공식 문서 정리 - (14) Initialization (0) | 2023.04.28 |
Swift 공식 문서 정리 - (11) Methods (0) | 2023.04.27 |
Swift 공식 문서 정리 - (10) Properties (0) | 2023.04.27 |
Swift 공식 문서 정리 - (9) Structures and Classes (0) | 2023.04.27 |