swift学习笔记之-下标脚本

//下标脚本subscript

 

import UIKit

 

/*下标脚本(Subscripts)

下标脚本: 

    1.可以定义在类(Class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection),列表(list)或序列(sequence)中元素的快捷方式。可以使用下标脚本的索引设置和获取值,不需要再调用对应的存取方法。举例来说,用下标脚本访问一个Array实例中的元素可以写作someArray[index],访问Dictionary实例中的元素可以写作someDictionary[key]

    2.定义下标脚本使用subscript关键字,指定任意数量、任意类型的入参和任意的返回类型,下标脚本可以使用变量参数和可变参数,但不能使用输入输出参数,也不能给参数设置默认值。下标脚本可以设定为读写或只读。这种行为由 get 和 set 实现,有点类似计算型属性

        subscript(index1:Int,index2:Int)->Int{

            get {

                .....返回一个适当的 Int 类型的值

            }

            set(newValue) {

                .....用默认参数newValue执行适当的赋值操作

            }

        }

    3.一个类或结构体可以根据自身需要提供多个下标脚本实现,使用下标脚本时将通过入参的数量和类型进行区分,自动匹配合适的下标脚本,这就是下标脚本的重载

 

*/

 

struct TimesTable {

    let multiplier: Int

    subscript(index: Int) -> Int {          //只读下标脚本,省略了get{}

        return multiplier * index

    }

}

let threeTimesTable = TimesTable(multiplier: 3)

print("six times three is \(threeTimesTable[6])")

// 输出 "six times three is 18"

 

struct Matrix {

    let rows: Int, columns: Int

    var grid: [Double]

    init(rows: Int, columns: Int) {    //接受两个入参的构造方法,入参分别是rows和columns,创建了一个足够容纳rows * columns个Double类型的值的数组

        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 {    //两个参数的下标脚本:类似二维坐标位置[row,column]

        get {

            assert(indexIsValidForRow(row, column: column), "Index out of range")

            return grid[(row * columns) + column]

        }

        set {

            assert(indexIsValidForRow(row, column: column), "Index out of range")   //assert(条件,信息)断言,条件为false时代码停止运行并显示信息

            grid[(row * columns) + column] = newValue

        }

    }

}

var matrix = Matrix(rows: 2, columns: 2)    //创建了一个Matrix实例来表示两行两列的矩阵

matrix[0, 1] = 1.5  //调用下标脚本的 set 将矩阵右上角位置(即row为0、column为1的位置)的值设置为1.5

matrix[1, 0] = 3.2  //将矩阵左下角位置(即row为1、column为0的位置)的值设置为3.2

let someValue = matrix[2, 2]

 

posted on 2016-02-07 12:40  SuriFuture  阅读(185)  评论(0编辑  收藏  举报

导航