站在汇编角度深入了解 Swift(八)

246 阅读1分钟

方法

  • 枚举、结构体、类都可以定义实例方法、类型方法
    • 实例方法:通过实例调用
    • 类型方法:通过类型调用,用 static 或者 class 关键字定义
  • self
    • self 在实例方法中,代表实例
    • self 在类型方法中,代表类型
    • 类型方法中 static func getCount 中
      • cout 等价于 self.cout、Car.self.cout、Car.cout

mutating

  • 结构体和枚举是值类型,默认情况下,值类型的属性不能被自身的实例方法修改
  • 在 func 关键字加 mutating 可以允许这种修改行为

discardResult

  • 可以消除函数调用后返回值没有使用的警告

subscript

  • 使用 subscript 可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:下标脚本
  • subscript的语法类似于实例方法、计算属性,本质就是方法
  • subscript 中的细节
    • get 方法的返回值类型
    • set 方法中的 newValue 的类型
    • subscript 可以接受多个参数,并且类型任意
    • 可以只有 get 方法
    • 可以设置参数标签
    • 下标可以是类型方法
  • 结构体、类作为返回值对比
struct Point {
    var x = 10
    var y = 11
}

class PointManager {
    var point = Point()
    subscript(index: Int) -> Point {
        // 如果是结构体这里必须写 set 方法,而类可以不写
        set { point = newValue }
        get { point }
    }
}

let p = PointManager()
p[0].x = 20
p[0].y = 22