subscript(index: Int) -> Int {
get {
// Return an appropriate subscript value here.
}
set(newValue) {
// Perform a suitable setting action here.
}
}
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-times-table은 고정된 수학 규칙을 기반으로 합니다. threeTimesTable[someIndex]를 새 값으로 설정하는 것은 적절하지 않으므로 TimesTable의 첨자는 읽기 전용 첨자로 정의됩니다.
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
Swift의 사전 유형은 키-값 첨자를 선택적인 유형을 취하고 반환하는 첨자로 구현합니다. 위의 numberOfLegs 사전의 경우 키-값 첨자는 Int? 또는 "선택적 int" 유형의 값을 취하여 반환합니다. 사전 유형은 선택적 첨자 유형을 사용하여 모든 키에 값이 있는 것은 아니라는 사실을 모델링하고 해당 키에 nil 값을 할당하여 키에 대한 값을 삭제할 수 있는 방법을 제공합니다.
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
}
}
}
var matrix = Matrix(rows: 2, columns: 2)
matrix[0, 1] = 1.5
matrix[1, 0] = 3.2
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
let someValue = matrix[2, 2]
// This triggers an assert, because [2, 2] is outside of the matrix bounds.
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)