方法(Method)
枚舉岗钩、結(jié)構(gòu)體、類都可以定義實例方法娄柳、類型方法
- 實例方法(Instance Method):通過實例對象調(diào)用
- 類型方法(Type Method):通過類型調(diào)用欧募,用
static
或者class
關(guān)鍵字定義
class Car {
static var cout = 0
init() {
Car.cout += 1
}
static func getCount() -> Int { cout }
}
let c0 = Car()
let c1 = Car()
let c2 = Car()
print(Car.getCount()) // 3
self
- 在實例方法中代表實例對象
- 在類型方法中代表類型
- 在類型方法static func getCount中
- cout等價于self.cout茄茁、Car.self.cout康嘉、Car.cout
mutating
- 結(jié)構(gòu)體和枚舉是值類型砾莱,默認情況下,值類型的屬性不能被自身的實例方法修改
- 在
func
關(guān)鍵字前加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
凄鼻,可以消除:函數(shù)調(diào)用后返回值未被使用的警告?
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)
@discardableResult
func get() -> Int {
return 10
}
get()