Swift2.1-下标脚本
官方文档下标脚本类,结构体和枚举可以定义下标脚本,下标脚本可以认为是访问集合( 你可以为一个类型定义多个下标脚本,并且合适的下标脚本通过重载来使用,基于你传递的下表脚本的索引值类型。下标脚本没有限制单个纬度,并且你可以使用多个输入形参来定义下表脚本满足自定义类型的需求。 下标脚本的语法下表脚本允许你通过在实例名后面的方括号传入一个或多个索引值对该实例进行访问和赋值。语法类似于实例方法和和计算属性的混合。写下标定义的时候要带上关键字 subscript(index: Int) -> Int {
get {
// return an appropriate subscript value here
}
set(newValue) {
// perform a suitable setting action here
}
}
与只读计算属性一样,你可以给下标脚本使用 subscipt(index: Int) -> {
// return an appropriate subscript value here
}
下面是下标脚本的只读属性实现的过程的,定义了一个 struct TimeTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is (threeTimesTable[6])")
// prints "six times three is 18"
在这个??中,创建了一个新的 你可以通过下标脚本来得到结果,比如
下标脚本用法“下标脚本”确切的意思取决于它使用的上下文。通常下标脚本是用来访问集合( 例如,Swift的字典( var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
上面的??定义了一个名为 更多关于字典(
下标脚本选项下标脚本允许任意数量的输入形参索引,并且这些输入形参可以是任何类型。下标脚本也可以返回任何类型。下标脚本可以使用变量参数和可变参数,但是不能使用输入输出( 一个类或结构体可以根据自身需要提供多个下标脚本实现,在定义下标脚本时通过传入参数的类型进行区分,使用下标脚本时会自动匹配合适的下标脚本实现运行,这就是下标脚本的重载。 一个下标脚本参数是最常见的情况,但只要有合适的场景也可以定义多个下标脚本参数。如下例定义了一个Matrix结构体,将呈现一个Double类型的二维矩阵。Matrix结构体的下标脚本需要两个整型参数: struct Martix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int,columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * cloumns,repeatedValue: 0.0)
}
func indexIsValidForRow(row: Int,column: Int) -> Bool {
return row >= 0 && row < rows && cloumn >= 0 && cloumn < cloumns
}
subscript(row: Int,column: Int) -> Double {
get {
assert(indexIsValidForRow(row, cloumn: column),"index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValidForRow(row, column: column),"Index out of range")
grid[(row * columns) + column] = newValue
}
}
}
你可以通过传入合适的 var matrix = Matrix(rows: 2,columns: 2)
上例中创建了一个新的两行两列的 将值赋给带有 matrix[0,1] = 1.5
matrix[1,0] = 3.2
上面两条语句分别让matrix的右上值为 1.5,坐下值为 3.2:
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
断言在下标脚本越界时触发: let someValue = matrix[2,2]
// this triggers an assert,because [2,2] is outside of the matrix bounds
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |