Swift下標腳本語法
下標腳本語法
下標腳本允許你通過在實例後麵的方括號中傳入一個或者多個的索引值來對實例進行訪問和賦值。語法類似於實例方法和計算型屬性的混合。與定義實例方法類似,定義下標腳本使用subscript
關鍵字,顯式聲明入參(一個或多個)和返回類型。與實例方法不同的是下標腳本可以設定為讀寫或隻讀。這種方式又有點像計算型屬性的getter和setter:
subscript(index: Int) -> Int {
get {
// 返回與入參匹配的Int類型的值
}
set(newValue) {
// 執行賦值操作
}
}
newValue
的類型必須和下標腳本定義的返回類型相同。與計算型屬性相同的是set的入參聲明newValue
就算不寫,在set代碼塊中依然可以使用默認的newValue
這個變量來訪問新賦的值。
與隻讀計算型屬性一樣,可以直接將原本應該寫在get
代碼塊中的代碼寫在subscript
中:
subscript(index: Int) -> Int {
// 返回與入參匹配的Int類型的值
}
下麵代碼演示了一個在TimesTable
結構體中使用隻讀下標腳本的用法,該結構體用來展示傳入整數的n倍。
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
println("3的6倍是\(threeTimesTable[6])")
// 輸出 "3的6倍是18"
在上例中,通過TimesTable
結構體創建了一個用來表示索引值三倍的實例。數值3
作為結構體構造函數
入參初始化實例成員multiplier
。
你可以通過下標腳本來得到結果,比如threeTimesTable[6]
。這條語句訪問了threeTimesTable
的第六個元素,返回6
的3
倍即18
。
注意:
TimesTable
例子是基於一個固定的數學公式。它並不適合開放寫權限來對threeTimesTable[someIndex]
進行賦值操作,這也是為什麼附屬腳本隻定義為隻讀的原因。