swift3 下标subscript
下标是方法的一种,是访问集合、列表或者序列中的元素的快捷方式。
定义形式:一个名为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相关推荐
- Swift 中 String 取下标及性能问题
取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 String 中获取 let greeting ...
- Swift字典Dictionary快速文档
Swift Dictionary字典 简述 字典就是通过Key - Value对应关系的数据结构. swift与OC字典区别 类型: Swift字典是值类型, OC字典类型为引用类型 初始化方法 ...
- python映射类型-详解Python中映射类型(字典)操作符的概念和使用
映射类型操作符 (1)标准类型操作符 字典可以和所有的标准类型操作符一起工作,但却不支持像拼接(concatenation)和重复(repetition)这样的操作.这些操作对序列有意义,可对映射类型 ...
- Matlab拾零(to be continued)
1.a:n:b 运算符 和 linspace(a,b,n),作用相似,不同看参数位置. 2. ; 为命令执行结束标志. 3. ... 为续行符. 4.输入一个命令之后,系统会检查是不是变量.内部函数. ...
- c++ 数组换行_C语言的数组的构建与打印
在许多程序中,数组很重要.数组可以作为一种存储多个相关项的便利方式. 数组(array)是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int类型的值.整个数组有一个数组名,通过整 ...
- dll文件用什么语言编写_零基础学习markdown标记语言语法,十分简单便捷编写markdown文件...
引言:在完成了使用开源的Atom软件搭建好编写markdown的环境后,接下来就进行我们的第一个markdown文件的编写,同时学习markdown标记语言的基础语法,都是十分简单的一些标记,如果学习 ...
- (持续更新)webstorm快捷键及术语翻译
快捷键: 说明 设置: Ctrl + Alt + S 选中单词: ctrl+W ...
- JavaScript 对象与数组参考大全
http://www.cnblogs.com/meil/archive/2006/06/28/437527.html本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作 ...
- AWK高级编程 转载
AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与 ...
- JavaScript基础内容
1.1 JavaScript基础概念: JavaScript (ECMAScript) :JavaScript 是脚本语言.JavaScript和ECMAScript通常被人用来表达相同的含义,但是J ...
最新文章
- 人人都能搞懂的AI(四)- AI对社会的影响
- [转载] Maven类包冲突终极三大解决技巧 mvn dependency:tree
- 完美解答35K月薪的MySQL面试题(一)MySQL是如何存储数据的
- 互联网1分钟 | 1009
- 31天重构学习笔记19. 提取工厂类
- Gartner Q2服务器市场报告5大要点
- centos7 docker删除端口映射_centos7安装docker,结合docker安装mysql,学习简单使用
- 软考网络工程师学习笔记5-局域网与城域网(二)
- easyui修改css样式,修改easyui的easyloader的默认css目录路径
- python无缘无故不执行/跳过某个函数,无报错无警告
- Spark Structured SQL : JDBC写入Oracle
- 两次被简书签约作者拉黑的经历
- POJ3619 Speed Reading【水题】
- fraction类的创建java_设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)...
- C语言一个数组中随机抽取5个数字
- 解决 Elastic Search 的 Fast Vector Highlighting (FVH) 策略无法高亮 nested 数据类型
- google_trans_new库:谷歌翻译库Googletrans的替代品
- 人间繁华江上明月,乃浮生一梦,惟真情长在——读沈君山《浮生再记》(并转书评)
- AFFF3%水成膜泡沫灭火剂生产厂家分析品牌哪家好数据说明
- JavaDay13 抽象类 、接口、多态
热门文章
- 示波器两个重要参数 - 带宽、采样率
- 仪表框架 3500/05-01-01-00/HONEYWELL51403776-100
- math.abs() java_Java中使用Math.abs你入坑了?
- iPhone 开发常用工具
- 计算机应用基础演示文稿内容,计算机应用基础(PowerPoint 2003电子演示文稿系统)...
- interface和abstract interface
- Python 学习笔记 变量 xxx XXX
- SVN Commit failed(details follow)
- linux端口占满,Linux查看端口占用情况,并强制释放占用的端口
- java epoch_获取Java中的Epoch的天数,周数和月份