Swift下標


在下標的幫助下,可以存取類,結構和列舉中的集合,序列和列表的元素成員。 這些下標用於在索引的幫助下儲存和檢索值。 使用someArray [index]來存取陣列元素,並在字典範例中的後續成員元素可以使用someDicitonary [key]來存取。

對於單個型別,下標可以是單個宣告到多個宣告。 可以使用適當的下標來過載傳遞給下標的索引值的型別。 根據使用者對其輸入資料型別宣告的要求,下標的範圍也從一維到多維。

下標宣告語法及其用法

回顧一下計算屬性。 下標也遵循與計算屬性相同的語法。 對於查詢型別範例,下標寫在方括號內,後跟範例名稱。 下標語法遵循與「範例方法」和「計算屬性」語法相同的語法結構。 subscript關鍵字用於定義下標,使用者可以使用返回型別指定單個或多個引數。 下標可以具有讀寫或唯讀屬性,並且在gettersetter屬性的幫助下儲存和檢索範例,如計算屬性的屬性。

語法

subscript(index: Int) ?> Int {
   get {
      // used for subscript value declarations
   }
   set(newValue) {
      // definitions are written here
   }
}

範例1

struct subexample {
   let decrementer: Int
   subscript(index: Int) -> Int {
      return decrementer / index
   }
}
let division = subexample(decrementer: 100)

print("The number is divisible by \(division[9]) times")
print("The number is divisible by \(division[2]) times")
print("The number is divisible by \(division[3]) times")
print("The number is divisible by \(division[5]) times")
print("The number is divisible by \(division[7]) times")

當使用playground執行上述程式時,得到以下結果 -

The number is divisible by 11 times
The number is divisible by 50 times
The number is divisible by 33 times
The number is divisible by 20 times
The number is divisible by 14 times

範例2

class daysofaweek {
   private var days = ["Sunday", "Monday", "Tuesday", "Wednesday",
      "Thursday", "Friday", "saturday"]
   subscript(index: Int) -> String {
      get {
         return days[index]
      }
      set(newValue) {
         self.days[index] = newValue
      }
   }
}
var p = daysofaweek()

print(p[0])
print(p[1])
print(p[2])
print(p[3])

當使用playground執行上述程式時,得到以下結果 -

Sunday
Monday
Tuesday
Wednesday

下標中的選項

下標採用單個到多個輸入引數,這些輸入引數也屬於任何資料型別。 它們還可以使用變數和可變引數。 下標不能提供預設引數值或使用任何輸入輸出引數。

定義多個下標稱為「下標過載」,類或結構可根據需要提供多個下標定義。 這些多個下標是根據下標括號中宣告的值的型別推斷的。參考以下範例程式碼 -

struct Matrix {
   let rows: Int, columns: Int
   var print: [Double]
   init(rows: Int, columns: Int) {
      self.rows = rows
      self.columns = columns
      print = Array(count: rows * columns, repeatedValue: 0.0)
   }
   subscript(row: Int, column: Int) -> Double {
      get {
         return print[(row * columns) + column]
      }
      set {
         print[(row * columns) + column] = newValue
      }
   }
}
var mat = Matrix(rows: 3, columns: 3)

mat[0,0] = 1.0
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0

print("\(mat[0,0])")

當使用playground執行上述程式時,得到以下結果 -

1.0

Swift 4下標支援單個引數到適當資料型別的多個引數宣告。 程式將Matrix結構宣告為2 * 2維陣列矩陣,以儲存Double資料型別。 Matrix引數輸入整數資料型別,用於宣告行和列。

通過將行和列計數傳遞給初始化來建立Matrix的新範例,如下所示。

var mat = Matrix(rows: 3, columns: 3)

可以通過將行和列值傳遞到下標中來定義矩陣值,用逗號分隔,如下所示。

mat[0,0] = 1.0  
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0