方法
- 枚举、结构体、类都可以定义实例方法、类型方法
- 实例方法:通过实例调用
- 类型方法:通过类型调用,用 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