Swift文档Chapter 11 方法


方法与某些功能相关联的函数。分为实例方法类型方法。类型方法和类型本身相关联。

实例方法

实例方法属于某个特定的类,结构体或者枚举类型的方法。实例方法的语法和函数完全一致。

self属性

每一个实例都有一个隐含属性self,完全等于类型自身。可以通过这种方式引入当前实例。
默认情况下会隐式使用self,只有在参数名和属性名称相同的时候需要显式的使用self

在实例方法中修改值类型

结构体和枚举类型是值类型,值类型的属性不能够被实例方法修改。如果需要修改,那么需要把方法改为可变(mutating)行为,方法内部可以改变属性。

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")

如果结构体声明为常量的话,更改内部值的函数不可以使用,会直接报错。

在可变方法中给self赋值

可变方法可以给self赋一个新的实例:

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        self = Point(x: x + deltaX, y: y + deltaY)
    }
}

枚举值也可以使用self更改为枚举值不同的成员。

类型方法

类型方法是被类型实例调用的方法。可以理解为静态方法。在方法前使用static指定类型方法。类还可以使用class定义类型方法,从而可以允许子类重写父类该方法实现。

class SomeClass {
    class func someTypeMethod() {
        // 在这里实现类型方法
    }
}
SomeClass.someTypeMethod()

类型方法中self指向类型本身,而不是一个实例。类型方法的中,任何未限定的方法和属性名称,可以被本类中其他的类型方法和类型属性引用。一个类型方法可以直接通过类型方法的名称调用本类中的其它类型方法,而无需在方法名称前面加上类型名称。