Swift - 下标



下标是 Swift 提供的一种特殊功能,用于访问集合、序列和列表的元素。它是获取或设置集合中值的便捷方式。我们还可以使用下标根据索引获取或设置值。甚至类、结构体和枚举也可以定义下标。

单个类型可以有多个下标。我们可以根据传递给下标的索引值的类型使用适当的下标进行重载。我们可以根据需要定义一个可以接受单个参数或多个参数的下标。

下标声明

我们可以使用 `subscript` 关键字定义**下标**,它可以接受一个或多个输入参数并返回类型。它可以是读写或只读的。它允许我们通过在实例名称后编写方括号中一个或多个值来对实例执行查询。

语法

以下是下标的语法:

subscript(index: Int) -> Int {
   get {
      // Retrieve the value at the specified index
   }
   set(newValue) {
      // Set the value at the specified index
   }
}

以下是只读下标的语法:

subscript(index: Int) -> Int {
   // Return subscript value here
}

示例

Swift 程序,使用下标语法检索值。

// Defining structure
struct subexample {
   let decrementer: Int
    
   // Declaring subscript
   subscript(index: Int) -> Int {
      return decrementer / index
   }
}

// Creating instance of the structure
let division = subexample(decrementer: 100)

// Retrieving values using subscript syntax
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")

输出

它将产生以下输出:

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

示例

Swift 程序,使用下标语法访问值。

// Defining class
class daysofaweek {

   private var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
    
   // Declaring subscript    
   subscript(index: Int) -> String {
    
      // Retrieve the value at the specified index
      get {
         return days[index]
      }
        
      // Set the value at the specified index 
      set(newValue) {
         self.days[index] = newValue
      }
   }
}

// Creating instance of class
var p = daysofaweek()

// Accessing elements using subscript
print(p[0])
print(p[1])
print(p[2])
print(p[3])

输出

它将产生以下输出:

Sunday
Monday
Tuesday
Wednesday

下标选项

下标可以接受任何数据类型的单个或多个输入参数,也可以返回任何数据类型的返回值。这些参数可以具有默认值。下标可以使用可变参数,但不能使用 in-out 参数。

定义多个下标称为“下标重载”,其中类或结构体可以根据需要提供多个下标定义。这些多个下标是根据在下标括号内声明的值的类型推断的。

示例

Swift 程序,使用下标语法访问值。

// Defining structure
struct Matrix {

   let rows: Int, columns: Int
   var print: [Double]

   // Initializer to create a matrix 
   init(rows: Int, columns: Int) {
      self.rows = rows
      self.columns = columns
        
      // Initializing the matrix with an array 
      print = Array(repeating: 0.0, count: rows * columns)
   }

   // Subscript for accessing and modifying elements in the matrix
   subscript(row: Int, column: Int) -> Double {
      get {
         return print[(row * columns) + column]
      }
      set {
         print[(row * columns) + column] = newValue
      }
   }
}

// Creating an instance 
var mat = Matrix(rows: 3, columns: 3)

// Modifying elements in the matrix using subscript notation
mat[0, 0] = 1.0
mat[0, 1] = 2.0
mat[1, 0] = 3.0
mat[1, 1] = 5.0

// Accessing and printing elements from the matrix using subscript notation
print("\(mat[0, 0])") 
print("\(mat[0, 1])") 
print("\(mat[1, 0])") 
print("\(mat[1, 1])") 

输出

它将产生以下输出:

1.0
2.0
3.0
5.0
广告