swift从入门到精通10-下标

274 阅读1分钟

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-方法