您的位置:首页 > 移动开发 > Swift

swift具体解释之八---------------下标脚本

2017-06-17 13:44 281 查看
swift具体解释之八—————下标脚本

下标脚本 能够定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中。能够觉得是訪问对象、集合或序列的快捷方式。不须要再调用实例的特定的赋值和訪问方法

关键字
subscript


下标脚本能够设定为 仅仅读 和 读写 相似于
getter
setter


//语法
subscript(index : Int) ->Int
{
get{
}
set(newValue){
}
}


以下看一个样例 :

struct  Tables {
var mul  = 2;
//仅仅读的下标脚本
subscript(index :Int)->Int{
return 2*index
}
}


let tb = Tables()
print(tb[2]) //4


下标脚本 能够传入多个參数 或者可变类型 。可是inout和默认參数不行 。

一个类或者结构体中能够有多个下标脚本 能够依据传入的參数类型进行区分

struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns, repeatedValue: 0.0)
}
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
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
}
}
}


Matrix提供了一个两个入參的构造方法,入參各自是rows和columns。创建了一个足够容纳rows * columns个数的Double类型数组。

为了存储。将数组的大小和数组每一个元素初始值0.0。都传入数组的构造方法中来创建一个正确大小的新数组

你能够通过传入合适的row和column的数量来构造一个新的Matrix实例:
var matrix = Matrix(rows: 2, columns: 2)


上例中创建了一个新的两行两列的Matrix实例。

在阅读顺序从左上到右下的Matrix实例中的数组实例grid是矩阵二维数组的扁平化存储:

示意图

grid = [0.0, 0.0, 0.0, 0.0]

col0 col1

row0 [0.0, 0.0,

row1 0.0, 0.0]

将值赋给带有row和column下标脚本的matrix实例表达式能够完毕赋值操作,下标脚本入參使用逗号切割

matrix[0, 1] = 1.5

matrix[1, 0] = 3.2

上面两条语句分别让matrix的右上值为 1.5,坐下值为 3.2:

[0.0, 1.5,

3.2, 0.0]

这个基本算官方的样例。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: