swift下标脚本和extension扩展

一.类的下标方法

类、结构体和枚举可以定义下标,它可以作为访问集合、列表或序列成员元素的快捷方式。可使用下标通过索引值来设置或检索值而不需要为设置和检索分别使用实例方法。
可以为一个类型定义多个下标,并且下标会基于传入的索引值的类型选择合适的下标重载使用。下标没有限制单个维度,你可以使用多个输入形参来定义下标以满足自定义类型的需求。

下标脚本允许通过在实例名后面的方括号内写一个或多个值对该类的实例进行查询。它的语法类似于实例方法和计算属性。使用关键字subscript来定义下标,并且指定一个或多个输入形式参数和返回类型,与实例方法一样。与实例方法不同的是,下标可以是读写也可以是只读的。
 

1//下标方法 2struct Matrix { 3 let rows: Int 4 let columns: Int 5 var grid: [Double] 6 init(row: Int, cloumns: Int) { 7 self.rows = row 8 self.columns = cloumns 9 grid = Array(repeating: 0.0, count: row * cloumns) 10 } 11 subscript(row: Int, cloumns: Int) -> Double { 12 get { 13 return grid[row * cloumns + cloumns] 14 } 15 set { 16 grid[row * cloumns + cloumns] = newValue 17 } 18 } 19} 20 21var matrix = Matrix(row: 2, cloumns: 2) 22matrix[1, 0] = 9.9 23matrix[0, 1] = 8.8 24print(matrix) //输出:Matrix(rows: 2, columns: 2, grid: [9.9, 8.8, 0.0, 0.0]) 25print(matrix[1, 0]) //输出:9.9

二.extension扩展结构体、枚举、类
扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力。扩展和 Objective-C 中的 category 类似。
1.添加计算实例属性和计算类型属性(扩展不能添加存储属性,因为类被实例化后,内存空间是确定了,添加存储属性需要内存空间,会改变原有的内存结构。类比OC的分类不能添加实例变量、属性
2.定义实例方法和类型方法
3.提供新初始化器
4.定义下标
5.定义和使用新内嵌类型
6.使现有的类型遵循某协议
7.扩展可以向一个类型添加新的方法,但是不能重写已有的方法

1//扩展,添加计算属性 2extension Double { 3 var km: Double { 4 return self / 1000.0 5 } 6} 7 8//添加方法 9extension Int { 10 func repeatTask(task: ()->()) { 11 for _ in 0..<self { 12 task() 13 } 14 } 15} 16 174.repeatTask { 18 print("nihao") 19} 20 21//扩展下标 22extension Int { 23 subscript(digitIndex: Int) -> Int { 24 get { 25 var base = 1 26 for _ in 0..<digitIndex { 27 base *= 10 28 } 29 return (self / base) % 10 30 } 31 } 32} 33 34//扩展内嵌函数 35extension Int { 36 enum Kind { 37 case zero 38 case negative 39 case positivw 40 } 41 var kind: Kind { 42 get { 43 switch self { 44 case 0: 45 return .zero 46 case let x where x > 0 : 47 return .negative 48 default: 49 return .positivw 50 } 51 } 52 } 53} 54 55print(0.kind)
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

PTA1

11数组定义中,数组名后是用方括号括起来的常量表达式,不能用圆括号。(1分)\T\F12在C语言中能逐个地使用下标变量,也能一次引用整个数组。(1分)T\F\因为它有首地址13同一个数组中的每个元素都具有相同的数据类型,有统一的标识符即数组名,用不同的序号即下标来区分数组中的各元素。(1分)\T\F14数

C++写一个简单排序算法

分析算法步骤:1、暂定元素排列第0个为最小值,下标为min;2、然后从左往右依次扫描,与min的关键字比较,若比min的更小,则更新min下标为当前下标;3、并且把先前的最小值与当前找到目标的元素交换位置。cinclude<iostreamusingnamespacestd;voidSwap(int&a,int&b)inttem

python 字典

字典(dict):以键值对的方式存在,以大括号为标志、在字典里面键是不能修改的,值可以修改语法格式:字典名{key1:value1,key2:value2,.......}note:是无序的类型,建必须唯一,值不必。索引是以键为下标,不能索引键对应的值,键不能为列表特点:1.键值之间必须用冒号(:)隔开2.项与项之间必须用逗号(,)隔开3.字典中的键必须

IOS开发:Swift中附属脚本的使用说明

附属脚本,说白了就是下标,就是类似数组(Array)的someArray\index\或字典(Dictionary)的someDictionary\key\这种用法。Swfit把这种功能开放了出来,使得我们自定义的类、结构体、枚举也能有这样的功能。这种特性可以让我们非常方便的来访问某些变量。接下里我们举个例子来说明它的用法。class

JS 获取数组某个元素下标 函数方法

/获取某个元素下标arrays:传入的数组obj:需要获取下标的元素/functioncontains(arrays,obj){variarrays.length;w