附 属 脚 本可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。 举例来说,用附属脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写 someDictionary[key]。对于同一个目标可以定义多个附属脚本,通过索引值类型的不同来进行重载,而且索引值的个数可以是多个。
附属脚本语法
附属脚本允许你通过在实例后面的方括号中传入一个或者多 个的索引 值来对实例 进 行 访 问 和赋值。语法类似于实例方法和计算型属性的混合。与定义实例方法类似,定义附属脚本使 用 subscript 关键字,显式声明入参(一个或多个)和返回类型。与实例方法不同的是附属 脚本可以设定为读写或只读。
subscript(index: Int) -> Int{
get{
//返回与入参匹配的Int类型的值
}
set(newValue){ //newValue 的类型必须和附属脚本定义的返回类型相同。与计算型属性相同的是 set 的入参 声明 newValue 就算不写,在 set 代码块中依然可以使用默认的 newValue 这个变量来访问 新赋的值。
//执行赋值操作
}
}
struct TimesTable {
let multiplier : Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3 )
println(“3 的 6 倍是(threeTimesTable[6])”)
let rows: Int, columns: Int
var grid: Double[]
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValidForRow(row, column: column), “Index out
of range”)
return grid[(row * columns) + column]
}
set {
assert(indexIsValidForRow(row, column: column), “Index out
of range”)
grid[(row * columns) + columns] = newValue
}