美文网首页
Swift 下标subscript

Swift 下标subscript

作者: Arthur澪 | 来源:发表于2020-02-20 11:01 被阅读0次

    下标可以定义在类、结构体和枚举中,是访问集合、列表、序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。如数组:someArray[index]

    一个类型可以定义多个下标,通过不同索引类型进行对应的重载。下标不限于一维,你可以定义具有多个入参的下标满足自定义类型的需求。

    关键字subscript

    使用subscript可以给任意类型(枚举、结构体、类)增加下标功能。下标允许你通过在实例名称后面的[ ]中传入一个或者多个索引值来对实例进行查询。下标可以设定为读写或只读,这种行为由 getter 和 setter 实现。

    subscript的本质就是方法(函数),语法类似于实例方法、计算属性。

    • 定义下标
    class Point {
        var x = 0.0, y = 0.0
        // 定义下标,这样实例后面就可以加[]了
        subscript(index: Int) -> Double {
            set {
                if index == 0 {
                    x = newValue
                } else if index == 1 {
                    y = newValue
                }
            }
            get {
                if index == 0 {
                    return x
                } else if index == 1 {
                    return y
                }
                return 0
            }
        }
    }
    

    如同只读计算型属性,对于只读下标的声明,你可以通过省略 get 关键字和对应的大括号组来进行简写:

    subscript(index: Int) -> Int {
        // 返回一个适当的 Int 类型的值
    }
    
    • 使用下标功能,方便设置or取 属性值
      对于定义了subscript,通过给类或者实例添加[ ](类似数组)并传入subscript的参数,即可调用下标。
    var p = Point()   // 创建实例
    p[0] = 11.1   // 实例后直接加 [],
    p[1] = 22.2
    print(p.x) // 11.1
    print(p.y) // 22.2
    print(p[0]) // 11.1
    print(p[1]) // 22.2
    

    下标也可以是类方法

    class Sum {
        // 这里:设有两个索引
        static subscript(v1: Int, v2: Int) -> Int {
            return v1 + v2
        }
    }
    
    
    print(Sum[10, 20]) // 30
    

    subscript中定义的返回值类型决定了:
    get方法的返回值类型,及set方法中newValue的类型。
    subscript可以接受多个参数,并且类型任意
    subscript可以没有set ,但必须要有get
    如果只有get,可以省略get

    相关文章

      网友评论

          本文标题:Swift 下标subscript

          本文链接:https://www.haomeiwen.com/subject/qnbtqhtx.html