《浅入浅出Swift》Subscripts 下标 发表于 2014-07-19 | 分类于 Swift , Subscripts , 下标 | 阅读次数: 字数统计: 476 字 | 阅读时长 ≈ 2 分钟 Subscripts123456789101112131415161718//下标允许我们为class,struct,enum定义下标,以更便捷的方式访问属性。//比如,Array和Dictionary都是结构和改写struct中保存的数据。//一个类型中可以定义多种下标访问方式(重载)//下标可以定义“读写”,“只读”型,通过定义一组操作完成的,这与之前的计算属性的setter和getter是一样的//下标语法,Subscript Syntax//读写型/*subscript(index:Int) -> Int { get { // return an appropriate subscript value here } set(newValue) { // perform a suitable setting action here }}*/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 //只读型 /* subscript (index: Int) -> Int{ //因为只有一个get方法,所以不需要get{}了 } */ //定义了一个叫TimesTable的结构体,他有一个只读性下标的定义 //通过下标语法subscript 可以得到multiplier那么多倍的index值 struct TimesTable{ let multiplier: Int subscript (index : Int) -> Int{ println(multiplier)//3 println(index)//6 println(multiplier * index)//18 return multiplier * index } } let threeTimesTable = TimesTable(multiplier: 3) println("six times three is \(threeTimesTable[6])") //多维数组,二维数组,下标选项(Subscript Options) struct Matrix{ //行,列 let rows:Int, 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 { assert(indexIsValidForRow(row, column: column), "Index out of range") return grid[(row * columns) + column] } set { assert(indexIsValidForRow(row, column: column), "Index out of range") grid[(row * columns)+column] = newValue } } //定义了矩阵类型Matrix ,通过grid来定义一个一维Array来保存数据 //读写型下标 //根据row和column可以计算出要访问的元素在Array中的位置,通过Array下标可直接~读取~写入~数据// var matrix = Matrix(rows: 2, columns: 2)// matrix[0, 1] = 1.5// matrix[1, 0] = 3.2 Reference The Swift Programming Language 坚持原创技术分享,您的支持将鼓励我继续创作! 打赏 支付宝