下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。
一个类型可以定义多个下标,通过不同索引类型进行重载。下标不限于一维,也可以定义具有多个入参的下标满足自定义类型的需求。
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]
*/
无善无恶心之体,
有善有恶意之动,
知善知恶是良知,
为善去恶是格物。