1.下标
使用subscript可以给任意类型(枚举、结构体、类)增加下标功能。 subscript的语法类似于实例方法、计算属性,本质就是方法(函数)。
- subscript可以没有set,但必须有get
- subscript可以设置参数标签
- subscript可以是类型方法
例子:
class SubscriptClass {
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
}else {
return 0
}
}
}
}
var sub = SubscriptClass()
sub[0] = 5
sub[1] = 7
print(sub.x)
print(sub.y)2.结构体和类作为返回值对比
如果返回的是结构体实例,则必须设置下标的set方法。
如果返回的是类实例,则不用设置下标的set方法。
例子:
class Test3 {
var x = 0.0, y = 0.0
}
class SubscriptClass2 {
var test3 = Test3()
subscript(index: Int) -> Test3 {
get {
test3
}
}
}
var sub2 = SubscriptClass2()
sub2[0].x = 11
sub2[0].y = 22
print(sub2.test3.x)
print(sub2.test3.y)struct Test3 {
var x = 0.0, y = 0.0
}
class SubscriptClass2 {
var test3 = Test3()
subscript(index: Int) -> Test3 {
set {
test3 = newValue
}
get {
test3
}
}
}
var sub2 = SubscriptClass2()
sub2[0].x = 11
sub2[0].y = 22
print(sub2.test3.x)
print(sub2.test3.y)3.接收多个参数的下标
subscript也可以接收多个参数的下标。
例子:
class SubscriptClass3 {
var x = 0, y = 0, z = 0
subscript(a: Int, b:Int) -> Int {
set {
x = a
y = b
z = newValue
}
get {
return z
}
}
}
var sub3 = SubscriptClass3()
sub3[2,3] = 6
print(sub3.x)
print(sub3.y)
print(sub3.z)上一篇文章:swift从入门到精通09-方法