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


    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书籍

  • 相关阅读:
    android大作业------任务领取
    读书笔记《编程珠矶》2
    学习进度第8周
    学习进度第7周
    世界疫情可视化展示-----echarts
    读书笔记《编程珠矶》1
    团队项目新闻app的需求分析
    学习进度第6周
    团队合作项目
    SpringMVC01
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7040047.html
Copyright © 2020-2023  润新知