下标

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. 常见问题(FAQ) | VPNCUP

    常见问题(FAQ) | VPNCUP 常见问题(FAQ) 关于FAQ 新手开始 登录验证问题 为什么刚注册后,登录VPN服务器提示错误? 免费注册的用户有哪些限制? 为什么连接免费VPN后20分钟自动 ...

  2. 三框架:使用数据源dbcp注意

    使用spring整合hibernate时间,需要使用该数据源,数据源使用apache的dbcp,使用dbcp当需要依靠pool的jar包.选择dbcp和pool当你需要注意. DBCP 2 compi ...

  3. Graphical Shell with WebShell - WebOS Internals

    Graphical Shell with WebShell - WebOS Internals Graphical Shell with WebShell From WebOS Internals J ...

  4. 网络编程——XML与JSON

    概述 如上篇博客点击打开链接介绍.互联网公司发布Web服务,于是开发者们就可以将其用到自己的应用中.Web服务的工作方式类似于浏览器,输入请求,按下回车,等待远程计算机响应.当响应返回时,浏览器会使用 ...

  5. PHP草根论之设计模式-訪问者模式

    关于模式本身的概念,请參考网上其他文章 此处仅仅讨论在PHP实际开发过程中的应用 此模式适用范围极为受限,适用情景: 1.适用于项目维护过程,不适用于项目开发过程 2.新增需求,要求为一个/多个类添加 ...

  6. 【Android工具类】Activity管理工具类AppManager

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 import java.util.Stack; import android.app.Activity; i ...

  7. Oracle JDBC版本区别(转)

    oracle\product\11.2.0\dbhome_1\jdbc\lib ojdbc5.jar ojdbc5dms.jar ojdbc5dms_g.jar ojdbc5_g.jar ojdbc6 ...

  8. Java整型数组的最大长度到底有多长?

    Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...

  9. javascript一元操作符(递增,递减)

    <script type="text/javascript"> var a="1"; var b=false; var c="dd&quo ...

  10. HTML 5最终确定,八年后,我们再谈谈如何改变世界

    从原:http://www.36kr.com/p/216655.html 我们第一次谈论HTML5要改变世界大概是由于乔布斯,他坚持在iOS上不兼容Flash,在Adobe统治多媒体开发的那个年代.这 ...