swift 笔记 (十二) —— 下标

下标
swift允许我们为 类,结构体,枚举 定义下标,以更便捷的方式访问一大堆属性。比如Array和Dictionary都是结构体,swift的工程师已经为这两个类型提供好了下标操作的代码,所以,我们才可以通过 myArray[2]这种方式,读取和改写这个struct中保存的数据。而且,一个类型中可以定义多种下标访问方式(重载,关于重载,在后面的笔记中会提到,这里先不用太在意)

下标可以定义为“读写”型的,也可以定义为”只读”型,这种行为,是通过定义一组操作完成的,这与之前笔记中提到过的用于计算的属性的setter和getter是一样的:

下标定义形式:

“读写”型:
subscript(index: Int) -> Int {
     get {

     }
     set(newValue) {

     }
}

“只读”型:
subscript(index: Int) -> Int {
     //前面的笔记中有提到,因为只有一个get方法,是可以省掉get{ 与 }的。
}

官方的例子:


定义了一个叫 TimesTable的结构体,它有一个“只读”型下标的定义,通过下标语法,可以取得到multiplier那么多倍的index值。。。因为那是 multiplier * index嘛。。。。
所以,最后一个println的结果是18.(multiplier的值被初始化为3, 3*6 = 18)

下标可以使用任何类型做为输入参数,也就是说,我们可以把class, struct, enum, Int, Double, String 等等,当做下标的参数使用,但是这个参数不能是in-out类型的,也不能有默认值。

前面的笔记中没有提到过任何关于“多维数组”的词,也没有相关的例子,因为我也不知道怎么弄,囧。
但是有了自定义下标的话,就不一样了,事情就变得简单了,一切由我们自己说了算,不管是二维,三维,四维,任何维度上保存什么类型等等,一切都由我们自己说了算, 拿二维数组来举例(其实是官方的例子):


定义了一个矩阵类型 Matrix, 通过var grid: Double[] 的使用可以看到, 第7行,定义了一个一维的Array来保存所有的数据。 第12行开始定义了下标的访问行为, 可以get, 也可以set, 所以这个下标是个“读写”型的。
根据下标的参数 row和 column可以计算出我们要访问的元素的在Array中的位置,通过Array的下标可以直接读取或者写入我们的数据。

var myMatrix = Matrix(row: 2, columns: 2)
myMatrix[0, 0] = 8

println(myMatrix[0, 0])   //得到8

至此,我们就可以开始快乐的使用二维数组了~~~多维的也一样 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值