Swift 下标subscript

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