1.5 KiB
1.5 KiB
方法
枚举、结构体、类都可以定义实例方法、类方法
- 实例方法(Instance Method)
- 通过实例调用
- 类方法(Type Method)
- 通过类型调用,用
static
或者class
关键字定义
- 通过类型调用,用
class Car {
static var cout = 0
init() {
Car.cout += 1
}
static func getCount() -> Int {
// 等价于 self.cout、Car.cout
cout
}
}
let c0 = Car()
let c1 = Car()
let c2 = Car()
// 3
print(Car.getCount())
self
- 在实例方法中代表实例
- 在类型方法中代表类型
mutating
结构体和枚举是值类型,默认情况下,值类型的属性不能被自身的实例方法修改。在 func
关键字前加 mutating
可以允许这种修改行为。
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(deltaX: Double, deltaY: Double) {
x += deltaX
y += deltaY
// self = Point(x: x + deltaX, y: y + deltaY)
}
}
enum StateSwitch {
case low, middle, high
mutating func next() {
switch self {
case .low:
self = .middle
case .middle:
self = .high
case .high:
self = .low
}
}
}
@discardableResult
在 func
前面加个 @discardableResult
,可以消除:函数调用后返回值未被使用的警告⚠
struct Point {
var x = 0.0, y = 0.0
@discardableResult mutating
func moveX(deltaX: Double) -> Double {
x += deltaX
return x
}
}
var p = Point()
p.moveX(deltaX: 10)