下標語法概念:
類和結構體以及枚舉能夠聲明下標快捷訪問集合中的成員。例如數組someArray[index]或者字典someDictionary[key]可以通過下標檢索和設置對應下標的成員的值。下標可以查詢一個類型的一個或多個寫在實例名稱后的方括號中的實例的值。如下所示:用subscript關鍵字來定義一個下標方法,里面有get和set兩個方法。這種方式是通過同樣的方式作為計算屬性的getter和setter 。
subscript(index: Int) -> Int {
get {
// return an appropriate subscript value here
}
set(newValue) {
// perform a suitable setting action here
}
}```
newValue的類型和subscript的返回類型相同,如果你的set方法沒有設置參數系統會默認有一個newValue參數
subscript(index: Int) -> Int {
// return an appropriate subscript value here
}```
下面定義一個TimesTable 結構體并聲明一個subscript(下標)方法。返回值是multiplier 和 index的乘積。例如下面multiplier 的值是3,index的值是6,threeTimesTable[6]返回的值是18
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"```
下面定義一個Matrix 結構體里面有int類型的rows和columns兩個屬性,以及一個存Double類型grid數組
struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns, repeatedValue: 0.0)//初始化一個grid 數組
}
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}//這個方法判斷row和column是否滿足要求
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValidForRow(row, column: column), "Index out of range")
return grid[(row * columns) + column]//返回對應下標的元素的值
}
set {
assert(indexIsValidForRow(row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue//給對應下標的元素設置值
}
}
}```
//定義一個兩行兩列的Matrix
var matrix = Matrix(rows: 2, columns: 2)```

//通過下標設置matrix的grid數組對應的行列的元素值
matrix[0, 1] = 1.5
matrix[1, 0] = 3.2```
