下標腳本 可以定義在類(Class)、結構體(structure)和枚舉(enumeration)中,是訪問集合(collection),列表(list)或序列(sequence)中元素的快捷方式??梢允褂孟聵四_本的索引設置和獲取值,不需要再調用對應的存取方法。舉例來說,用下標腳本訪問一個Array實例中的元素可以寫作someArray[index],訪問Dictionary實例中的元素可以寫作someDictionary[key]。
下標腳本語法
subscript(index: Int) -> Int {
get {
// 返回一個適當的 Int 類型的值
}
set(newValue) {
// 執(zhí)行適當的賦值操作
}
}
newValue的類型和下標腳本的返回類型相同。如同計算型屬性,可以不指定 setter 的參數(newValue)。如果不指定參數,setter 會提供一個名為newValue的默認參數。
如同只讀計算型屬性,可以省略只讀下標腳本的get關鍵字:
subscript(index: Int) -> Int {
// 返回一個適當的 Int 類型的值
}
下面代碼演示了只讀下標腳本的實現,這里定義了一個TimesTable結構體,用來表示傳入整數的乘法表:
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// 輸出 "six times three is 18"
下標腳本選項
下標腳本可以接受任意數量的入參,并且這些入參可以是任意類型。下標腳本的返回值也可以是任意類型。下標腳本可以使用變量參數和可變參數,但不能使用輸入輸出參數,
不能給參數設置默認值。
一個類或結構體可以根據自身需要提供多個下標腳本實現,使用下標腳本時將通過入參的數量和類型進行區(qū)分,自動匹配合適的下標腳本,這就是下標腳本的重載。
要點總結
Subscript在類和機構體里可以重載