位置:首頁 > 高級語言 > Swift教學 > Swift下標腳本語法

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的第六個元素,返回63倍即18


注意:
TimesTable例子是基於一個固定的數學公式。它並不適合開放寫權限來對threeTimesTable[someIndex]進行賦值操作,這也是為什麼附屬腳本隻定義為隻讀的原因。