下标

swift同意我们为 类。结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性。比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码。所以。我们才干够通过 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

至此。我们就能够開始快乐的使用二维数组了~~~多维的也一样 

swift 笔记 (十二) —— 下标的更多相关文章

  1. 《C++游戏开发》笔记十二 战争迷雾:初步实现

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...

  2. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  3. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  4. DirectX11笔记(十二)--Direct3D渲染8--EFFECTS

    原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ...

  5. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  6. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  7. 《深入理解Java虚拟机》读书笔记十二

    第十二章  Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...

  8. Swift学习笔记十二

    方法 方法就是和某种特定类型相关联的函数.类.结构体.枚举都可以定义实例方法和类型方法.类型方法和OC中的类方法类似. 结构体和枚举也可以定义方法是Swift与C/OC之间很大的一个区别,在OC中,只 ...

  9. swift 笔记 (十八) —— 扩展

    扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...

随机推荐

  1. NavigationBar 隐藏底部边线,阴影

    NavigationBar 底部默认有一条边线  假设项目中须要隐藏何以採用这个库 https://github.com/samwize/UINavigationBar-Addition/

  2. 深入浅出Windows BATCH

    1.什么是Windows BATCH BATCH也就是批处理文件,有时简称为BAT,是Windows平台上的一种可运行脚本,与*nix(Linux和Unix)上的Shell脚本和其它的脚本(Perl, ...

  3. 一个高速做git提交的脚本

    用于高速将项目中的全部改变push到代码仓库.能够替代下面操作: git add . git commit -m "" git push 项目地址: https://github. ...

  4. exit()和_exit()和return

    exit()和return的差别: 依照ANSI C,在最初调用的main()中使用return和exit()的效果同样. 但要注意这里所说的是"最初调用".假设main()在一个 ...

  5. SE 2014年5月8日

    两企业接入到 Internet(A公司和B公司),企业内部的用户及服务器均能够访问到 Internet. 2. A公司规模较大,采用了接入层/汇聚层/核心层的划分模式,接入层划分了多vLan(如图), ...

  6. poj2763(树链剖分)

    题目链接:http://poj.org/problem?id=2763 题意:定一棵带边权的树,要求支持两种操作:1)询问树中某两点间的距离. 2)修改某条边的权值. 分析:树链剖分,边权修改,路径求 ...

  7. VS2010添加默认路径,库以及Lib

    下面以OpenCV为例,不需要每次打开VS2010都手动添加OpenCV的库和lib,具体方法如下: VC++目录 步骤一:用任意文本编辑器打开:  VS安装目录中的\VC\VCWizards\def ...

  8. oracle的to_char中的fm

    SQL> select '|'||to_char(5,'999')||'|' from dual;  结果为:|   5| SQL> select '|'||to_char(5,'000' ...

  9. Learning React Native笔记

    React Native作为一个新事物,相关的资料还不多 官方的文档比较简单,缺少一些系统的例子 在对React Native的应用中,迫切的想学习一些别人的最佳实践.所以想通过看书系统的学习下 之前 ...

  10. 【转向Javascript系列】深入理解Web Worker

    本文首发在alloyteam团队博客,链接地址http://www.alloyteam.com/2015/11/deep-in-web-worker/ 上一篇文章<从setTimeout说事件循 ...