发布于 2015-06-14 01:57:18 | 132 次阅读 | 评论: 0 | 来源: 网络整理
下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值。语法类似于实例方法和计算型属性的混合。与定义实例方法类似,定义下标脚本使用subscript
关键字,显式声明入参(一个或多个)和返回类型。与实例方法不同的是下标脚本可以设定为读写或只读。这种方式又有点像计算型属性的getter和setter:
subscript(index: Int) -> Int {
get {
// 返回与入参匹配的Int类型的值
}
set(newValue) {
// 执行赋值操作
}
}
newValue
的类型必须和下标脚本定义的返回类型相同。与计算型属性相同的是set的入参声明newValue
就算不写,在set代码块中依然可以使用默认的newValue
这个变量来访问新赋的值。
与只读计算型属性一样,可以直接将原本应该写在get
代码块中的代码写在subscript
中:
subscript(index: Int) -> Int {
// 返回与入参匹配的Int类型的值
}
下面代码演示了一个在TimesTable
结构体中使用只读下标脚本的用法,该结构体用来展示传入整数的n倍。
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
println("3的6倍是(threeTimesTable[6])")
// 输出 "3的6倍是18"
在上例中,通过TimesTable
结构体创建了一个用来表示索引值三倍的实例。数值3
作为结构体构造函数
入参初始化实例成员multiplier
。
你可以通过下标脚本来得到结果,比如threeTimesTable[6]
。这条语句访问了threeTimesTable
的第六个元素,返回6
的3
倍即18
。
注意:
TimesTable
例子是基于一个固定的数学公式。它并不适合开放写权限来对threeTimesTable[someIndex]
进行赋值操作,这也是为什么附属脚本只定义为只读的原因。