Swift文件Chapter 11 方法
阿新 • • 發佈:2022-01-24
方法與某些功能相關聯的函式。分為例項方法與型別方法。型別方法和型別本身相關聯。
例項方法
例項方法屬於某個特定的類,結構體或者列舉型別的方法。例項方法的語法和函式完全一致。
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
指向型別本身,而不是一個例項。型別方法的中,任何未限定的方法和屬性名稱,可以被本類中其他的型別方法和型別屬性引用。一個型別方法可以直接通過型別方法的名稱呼叫本類中的其它型別方法,而無需在方法名稱前面加上型別名稱。