12.下标

  下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。

  一个类型可以定义多个下标,通过不同索引类型进行重载。下标不限于一维,也可以定义具有多个入参的下标满足自定义类型的需求。

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]
 */

 

posted @ 2016-07-18 13:11  LeeGof  阅读(345)  评论(0编辑  收藏  举报