下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0]。这就是一个下标脚本。通过索引0来快速取值。在Swift中,我们可以对类(Class)、结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法
一、常规定义
class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index]; } set{ scores[index] = newValue } } } var a = Student() a[0] = 1 a[1] = 2 println("a[0]:\(a[0]),a[1]:\(a[1])”)
重点:
① 下标语法使用subscript关键字来定义
② 下标语法使用get、set来定义读、写属性,并不需要2个属性都有,可以只读
③ 定义set属性时,传入的参数默认名称为newValue。并且newValue的类型和subscript函数返回值相同
二、下标语法参数
下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。下标脚本的返回值也可以是任何类型。下标脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置默认值都是不允许的。
class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(indexs:Int...) -> Int[]{ get{ var values:Int[] = Array() for index in indexs { values.append(scores[index]) } return values } set{ var i = 0 for index in indexs{ scores[index] = newValue[i++] } } } } var a = Student() a[1,2,3] = [5,6,7] println(a[0,1,2,3,4])
不过至今还未发现怎么向数组一样可以使用区间类型,比如a[1...3]
Swift学习笔记十二:下标脚本(subscript),布布扣,bubuko.com
时间: 2024-10-01 03:35:56