someArray[index]
, Dictionary Instance의 특정 Element는 someDictionary[key]
로 접근한다.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
}
}
}
Instance method
와 computed property
를 선언하는 것과 비슷하지만, subscript
는 읽고 쓰기(read-write
) 혹은 읽기 전용(read only
)만 가능하다. 정의는 computed property
방식과 같이 getter
, setter
방식을 따른다.Subscript
를 사용해 Instance
이름 뒤 대괄호에 하나 이상의 값을 작성하여 타입의 인스턴스를 조회할 수 있다.subscript(index: Int) -> Int {
get {
// Return an appropriate subscript value here.
}
set(newValue) {
// Perform a suitable setting action here.
}
}
set
에 대한 인자 값을 지정하지 않으면default value
로newValue
를 사용한다
get
, set
을 지우고 지정하지 않으면 read-only
로 선언된다.
Usage
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
Subscript Options
Subscript는 여러 개의 입력 파라미터를 가질 수 있고 어떤 타입이든지 입력과 반환이 가능하다. 또한 오버로딩을 허용하여 인자형, 반환형에 따라 원하는 수 만큼의 subscript를 선언할 수 있다.
Type Subscripts