PART_A 实例方法
- 简介
- 实例方法:可属于某个特定类、结构体或枚举实例的方法
- 实例方法能隐式访问它所属类型的所有其他实例方法和属性
- 实例方法只能被它所属的类的某个特定实例调用
- 调用方式:
对象.实例方法
- 方法的局部参数名称和外部参数名称、及修改
- 默认第一个为局部参数名称,后续为局部和外部参数名称
- 可为第一个添加显式的外部名称,为后续添加外部名称
_
,覆盖默认行为
// 定义方法
func add(a: Int, b: Int) { ... }
// 方法调用
.add(3, b: 8)
// 定义方法
func add(numPre a: Int, _ b: Int) { ... }
// 方法调用
.add(numPre: 3, 8)
- self 属性
- 适用场景:实例方法的某个参数名称与实例的某个属性名称相同时(参考 Java)
- 在实例方法中修改值类型
- 需在特定的方法中修改结构体或枚举的属性,可为该方法选择可变(
mutating
)行为. 当该方法做出改变后结果会写回到原始结构中
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveByX(2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// (3.0, 4.0)
- 在可变方法中给 self 赋值
- 上面可简写
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
self = Point(x: x + deltaX, y: y + deltaY)
}
}
- 枚举的可变方法可将 self 设置为同一枚举类型中的不同成员
enum TriStateSwitch {
case Off, Low, High
mutating func next() {
switch self {
case Off:
self = Low
case Low:
self = High
case High:
self = Off
}
}
}
var ovenLight = TriStateSwitch.Low
ovenLight.next()
// ovenLight 值为 High
ovenLight.next()
// ovenLight 值为 Off
PART_B 类型方法
- 类型方法:可属于类、结构体或枚举类型的方法
- 定义方式:
static
- 调用方式:
类名.方法名
、类名.属性名
class SomeClass {
// 类型属性
static var someProperty
// 类型方法
static func someTypeMethod() {
// Method Body
}
}
// 类型属性访问
SomeClass.someProperty
// 类型方法调用
SomeClass.someTypeMethod()