下标

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. 使用ROW_NUMBER()查询:列名 'RowNumber' 无效。

    原文:使用ROW_NUMBER()查询:列名 'RowNumber' 无效. 使用ROW_NUMBER()方法查询结果集:语句如下:   select ROW_NUMBER() OVER(ORDER ...

  2. hdu1876(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1876 题意:问机器人到达终点的过程中最多有几次完全消耗完能量,消耗完这么多次能量的方式有几种. 分析: ...

  3. Python 收集Twitter时间序列数据

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-18 @author: guaguastd @name: c ...

  4. C库函数标准编程之fscanf()函数解读及其实验

    函数功能 fscanf()函数用于从参数stream的文件流中读取format格式的内容,然后存放到...所指定的变量中去.字符串以空格或换行符结束(实验1中会对它进一步说明) 函数格式 字符格式说明 ...

  5. [置顶] JQuery实战总结三 标签页效果图实现

    在浏览网站时我们会看到当我们鼠标移到多个选项卡上时,不同的选项卡会出现自己对应的界面的要求,在同一个界面上表达了尽量多的信息.大大额提高了空间的利用率.界面的切换效果也是不错的哦,这次自己可以实现啦. ...

  6. android最近心得整理

    activity中OnAttachedWindow生命周期在OnResume之后,所以对长宽获取在推荐在OnAttachedWindow中进行. onDetachedWindow是在OnDestroy ...

  7. win7下硬盘安装win7+linuxUbuntu双系统方法

    Linux安装大致介绍: win7下硬盘安装win7+linuxUbuntu双系统方法 原则: 所有的看完在装,请仔细看 一 条件: 1. 系统选择 linux unbuntu12.04.2-desk ...

  8. SQL参数化查询的问题

    最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...

  9. dede 标签

     ◆织梦内容管理系统模板标签代码参考 [Arclist 标记] 这个标记是DedeCms最常用的一个标记,也叫自由列表标记,其中 hotart.coolart.likeart.artlist.imgl ...

  10. HDU1071 The area 【积分】

    The area Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...