下标是方法的一种,是访问集合、列表或者序列中的元素的快捷方式。

定义形式:一个名为subscript的计算属性;可以忽略set(只读)
用法:实例名[索引]
作用:可以访问或设置其中元素。

1.常见的用法:字典、数组等

var 数组1 = [1,2,3,55,6,-9,0]
数组1[3]  //55let 字典1 = ["a":1, "b": 2, "c":3]
字典1["b"]    //2

2.通过下标简化调用方法调用

//pow(x,y)  //其作用是计算x的y次方
struct 圆 {//一般方法func 面积(半径:Double) ->Double {return M_PI * pow(半径, 2)}//使用下标subscript简化调用方法subscript(半径:Double) ->Double {return M_PI * pow(半径, 2)}
}let 圆1 = 圆()
圆1.面积(半径: 3.3)  //34.21194399759284
//使用下标
圆1[3.3] //34.21194399759284

3.多维下标

get:用于获取属性的值
set:用于设置属性的值
assert(a, b) //第一个参数为判断条件(BOOL),第二个参数为条件”不满足”时的打印信息(String)。

3.1 下标可读可写

struct Matrix {var rows, cols : Intvar grid: [Int]init(rows: Int, cols: Int) {self.cols = colsself.rows = rowsgrid = Array(repeating: 0,count: rows * cols)}func indexIsValid(row:Int,col:Int) -> Bool {return row >= 0 && row < rows && col >= 0 && col < cols}subscript(row:Int, col:Int) ->Int {get {assert(indexIsValid(row: row, col: col), "数组索引越界")return grid[col + (row * cols)]}set {assert(indexIsValid(row: row, col: col), "数组索引越界")grid[col + (row * cols)] = newValue}}
}
//写
var matrix1 = Matrix(rows: 3, cols: 3)
matrix1[0,0] = 7
matrix1[0,1] = 5
matrix1[0,2] = -9
matrix1[1,0] = 8
matrix1[1,1] = 9
matrix1[1,2] = 99
matrix1[2,0] = -8
matrix1[2,1] = -9
matrix1[2,2] = -99matrix1.grid    //[7, 5, -9, 8, 9, 99, -8, -9, -99]
//读
matrix1[2,2]    //-99

3.2 下标只读

class SectionAndRow {var array:Array<Array<Int>> = [ [1,2],[3,4],[5,6],[7,8]]subscript(section:Int,row:Int)->Int{//忽略get块创建只写属性,忽略set块创建只读属性get{print(array.count)print(array[section].count)assert(section >= 0 && section < array.count && row >= 0 && row < array[section].count, "数组索引越界")let temp = array[section]return temp[row]}}
}
var data = SectionAndRow()
//通过二维下标取值
data[3,1]    //8

参考自SwiftV课堂视频源码

swift3 下标subscript相关推荐

  1. Swift 中 String 取下标及性能问题

    取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 String 中获取 let greeting ...

  2. Swift字典Dictionary快速文档

    Swift Dictionary字典 简述 字典就是通过Key - Value对应关系的数据结构. swift与OC字典区别 ​ 类型: Swift字典是值类型, OC字典类型为引用类型 初始化方法 ...

  3. python映射类型-详解Python中映射类型(字典)操作符的概念和使用

    映射类型操作符 (1)标准类型操作符 字典可以和所有的标准类型操作符一起工作,但却不支持像拼接(concatenation)和重复(repetition)这样的操作.这些操作对序列有意义,可对映射类型 ...

  4. Matlab拾零(to be continued)

    1.a:n:b 运算符 和 linspace(a,b,n),作用相似,不同看参数位置. 2. ; 为命令执行结束标志. 3. ... 为续行符. 4.输入一个命令之后,系统会检查是不是变量.内部函数. ...

  5. c++ 数组换行_C语言的数组的构建与打印

    在许多程序中,数组很重要.数组可以作为一种存储多个相关项的便利方式. 数组(array)是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值.整个数组有一个数组名,通过整 ...

  6. dll文件用什么语言编写_零基础学习markdown标记语言语法,十分简单便捷编写markdown文件...

    引言:在完成了使用开源的Atom软件搭建好编写markdown的环境后,接下来就进行我们的第一个markdown文件的编写,同时学习markdown标记语言的基础语法,都是十分简单的一些标记,如果学习 ...

  7. (持续更新)webstorm快捷键及术语翻译

    快捷键:                    说明 设置:                       Ctrl + Alt + S 选中单词:                    ctrl+W ...

  8. JavaScript 对象与数组参考大全

    http://www.cnblogs.com/meil/archive/2006/06/28/437527.html本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作 ...

  9. AWK高级编程 转载

    AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与 ...

  10. JavaScript基础内容

    1.1 JavaScript基础概念: JavaScript (ECMAScript) :JavaScript 是脚本语言.JavaScript和ECMAScript通常被人用来表达相同的含义,但是J ...

最新文章

  1. 人人都能搞懂的AI(四)- AI对社会的影响
  2. [转载] Maven类包冲突终极三大解决技巧 mvn dependency:tree
  3. 完美解答35K月薪的MySQL面试题(一)MySQL是如何存储数据的
  4. 互联网1分钟 | 1009
  5. 31天重构学习笔记19. 提取工厂类
  6. Gartner Q2服务器市场报告5大要点
  7. centos7 docker删除端口映射_centos7安装docker,结合docker安装mysql,学习简单使用
  8. 软考网络工程师学习笔记5-局域网与城域网(二)
  9. easyui修改css样式,修改easyui的easyloader的默认css目录路径
  10. python无缘无故不执行/跳过某个函数,无报错无警告
  11. Spark Structured SQL : JDBC写入Oracle
  12. 两次被简书签约作者拉黑的经历
  13. POJ3619 Speed Reading【水题】
  14. fraction类的创建java_设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)...
  15. C语言一个数组中随机抽取5个数字
  16. 解决 Elastic Search 的 Fast Vector Highlighting (FVH) 策略无法高亮 nested 数据类型
  17. google_trans_new库:谷歌翻译库Googletrans的替代品
  18. 人间繁华江上明月,乃浮生一梦,惟真情长在——读沈君山《浮生再记》(并转书评)
  19. AFFF3%水成膜泡沫灭火剂生产厂家分析品牌哪家好数据说明
  20. JavaDay13 抽象类 、接口、多态

热门文章

  1. 示波器两个重要参数 - 带宽、采样率
  2. 仪表框架 3500/05-01-01-00/HONEYWELL51403776-100
  3. math.abs() java_Java中使用Math.abs你入坑了?
  4. iPhone 开发常用工具
  5. 计算机应用基础演示文稿内容,计算机应用基础(PowerPoint 2003电子演示文稿系统)...
  6. interface和abstract interface
  7. Python 学习笔记 变量 xxx XXX
  8. SVN Commit failed(details follow)
  9. linux端口占满,Linux查看端口占用情况,并强制释放占用的端口
  10. java epoch_获取Java中的Epoch的天数,周数和月份