Swift全解析

文章26 |   阅读 13282 |   点赞0

来源:https://blog.csdn.net/u010586842/category_9264386.html

swift详解之八---------------下标脚本

x33g5p2x  于2022-03-08 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(443)

swift详解之八—————下标脚本

下标脚本 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法
关键字 subscript
下标脚本可以设定为 只读 和 读写 类似于gettersetter

//语法
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]

这个基本算官方的例子。
学习iOS,有他就够了,小码哥视频,传智、黑马、各种swift书籍

相关文章