码迷,mamicode.com
首页 > 其他好文 > 详细

swift 笔记 (十二) —— 下标

时间:2014-06-16 11:35:16      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   ext   com   

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

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

下标定义形式:

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

     }
     set(newValue) {

     }
}

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

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

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

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

至此,我们就可以开始快乐的使用二维数组了~~~多维的也一样 

swift 笔记 (十二) —— 下标,布布扣,bubuko.com

swift 笔记 (十二) —— 下标

标签:style   class   blog   http   ext   com   

原文地址:http://blog.csdn.net/supergerm/article/details/30160069

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!