下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。
一个类型可以定义多个下标,通过不同索引类型进行重载。下标不限于一维,也可以定义具有多个入参的下标满足自定义类型的需求。
1.下标语法(关键字:subscript)
subscript(index: Int) -> Int { get { // 返回一个适当的 Int 类型的值 } set(newValue) { // 执行适当的赋值操作 } } //1.定义下标使用subscript关键字,指定一个或多个输入参数和返回类型; //2.newValue的类型和下标的返回类型相同。如同计算型属性,可以不指定 setter 的参数(newValue)。如果不指定参数,setter 会提供一个名为newValue的默认参数。 //3.如同只读计算型属性,可以省略只读下标的get关键字;
2.示例
//下例定义了一个Matrix结构体,用于表示一个Double类型的二维矩阵。Matrix结构体的下标接受两个整型参数 struct Matrix { let rows: Int; let columns: Int; var grid: [Double]; init(rows: Int, columns: Int) { self.rows = rows; self.columns = columns; grid = Array(count: rows * columns, repeatedValue: 0.0); } func indexIsValidForRow(row: Int, column: Int) -> Bool { return row >= 0 && row < rows && column >= 0 && column < columns; } subscript(row: Int, column: Int) -> Double{ get{ return grid[(row * columns) + column]; } set{ grid[(row * columns) + column] = newValue; } }; } var matrix = Matrix(rows: 2, columns: 2); //grid = [0.0, 0.0,, 0.0, 0.0] matrix[0, 0] = 1; matrix[0, 1] = 2; matrix[1, 0] = 3; matrix[1, 1] = 4; //设置下标之后数组变成: /* [1, 2, 3, 4] */