Swift—下標指令碼(Subscripts),swiftsubscripts
下標指令碼可以定義在類(Class)、結構體(Struct)、枚舉(enumeration)這些目標中,可以認為是訪問集合,列表或序列的捷徑,使用下標指令碼的索引設定和擷取值,不需要再調用執行個體的特定的賦值和存取方法。對於同一個目標可以定義多個下標指令碼,通過索引實值型別的不同來進行重載,下標指令碼不限於單個緯度,你可以定義多個入參的下標指令碼滿足自訂類型的需求。
1.下標指令碼的文法
下標指令碼允許你通過在執行個體後面的方括弧中傳入一個或多個的索引值來對執行個體進行訪問和賦值。文法類似於執行個體方法和計算屬性的混合。與定義執行個體方法類似,定義下標指令碼使用subscript關鍵字,顯示聲明入參(一個或多個)和傳回型別。與執行個體方法不同的是下標指令碼可以設定為讀寫或唯讀。這種方式又有點像計算屬性的getter和setter:
subscript(index:Int)->Int { get { //返回與入參匹配的int類型的值 } set(newValue) { //執行賦值參數 } }
newValue的類型必須和下標指令碼定義的傳回型別相同。與計算型屬性相同的是set的入參聲明newValue就算不寫,在set代碼塊中依然可以使用預設的newValue這個變數來訪問新賦的值。與唯讀計算屬性一樣,可以直接將原本應該寫在get代碼塊中的代碼寫在subscript中:
subscript(index:Int)->Int { //返回與入參匹配的int類型的值 }
2.下標指令碼用法
根據使用情境不同下標指令碼也具有不同的含義。通常下標指令碼是用來訪問集合,列表或序列中元素的捷徑就。可以在你自己特定的類或結構體中自由的實現下標指令碼來提供合適的功能。
例如,Swift的字典(Dictionary)實現了通過下標指令碼來對其執行個體中存放的值進行存取操作。
var numberOfLegs = ["spider":8, "ant":6, "cat":4]numberOfLegs["bird"] = 4 //存值
3.下標指令碼選項
下標指令碼允許任意數量的入參索引,並且每個入參索引類型沒有限制。下標指令碼的傳回值也可以是任意類型。