下标
- 使用subscript,可以给任意类型(枚举、结构体、类)增加下标功能
- subscript的语法类似于实例方法、计算属性,本质就是方法
class Point {
var x = 0.0
var 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
}
}
}
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
- subscript 中定义的返回值类型,决定了 get 方法的返回值类型和 set 方法中newValue的类型
- subscript 可以接受多个参数,并且类型任意
下标的细节
- subscript 可以没有 set 方法,但必须有 get 方法
- 如果只有 get 方法,可以省略 get
- 可以设置参数标签
class Point {
var x = 0.0
var y = 0.0
// 参数标签index
subscript(index i: Int) -> Double {
// 只有get方法时,可以省略get
if i == 0 {
return x
} else if i == 1 {
return y
}
return 0
}
}
var p = Point()
p.y = 22.2
print(p[index: 1]) // 22.2
- 下标可以是类型方法
class Sum {
// 在类中,类型方法可以用static关键字,也可以使用class关键字
class subscript(v1: Int, v2: Int) -> Int {
// get方法
v1 + v2
}
}
// 接收多个参数
print(Sum[10, 20])