1. 程式人生 > 其它 >Swift文件Chapter 11 方法

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指向型別本身,而不是一個例項。型別方法的中,任何未限定的方法和屬性名稱,可以被本類中其他的型別方法和型別屬性引用。一個型別方法可以直接通過型別方法的名稱呼叫本類中的其它型別方法,而無需在方法名稱前面加上型別名稱。