swift5-下标

Posted by AndyCao on September 12, 2019

下标

  • 使用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])