11.方法
-
實(shí)例方法
//實(shí)例方法是屬于某個(gè)特定類、結(jié)構(gòu)體或者枚舉類型實(shí)例的?法。實(shí)例方法提供訪問和修改實(shí)例 屬性的方法或提供與實(shí)例目的相關(guān)的功能,并以此來(lái)支撐實(shí)例的功能。實(shí)例方法的語(yǔ)法與函數(shù) 完全一致。 //self屬性:類型的每一個(gè)實(shí)例都有一個(gè)隱含屬性叫做 self , self 完全等同于該實(shí)例本身。 - 實(shí)際上,你不必在你的代碼?面經(jīng)常寫 self 。不論何時(shí),只要在一個(gè)方法中使?一個(gè)已知的 屬性或者方法名稱,如果你沒有明確地寫 self ,Swift 假定你是指當(dāng)前實(shí)例的屬性或者?法。 - 使?這條規(guī)則的主要場(chǎng)景是實(shí)例方法的某個(gè)參數(shù)名稱與實(shí)例的某個(gè)屬性名稱相同的時(shí)候。在這種情況下,參數(shù)名稱享有優(yōu)先權(quán),并且在引?屬性時(shí)必須使?一種更嚴(yán)格的方式。這時(shí)你可以使用self屬性來(lái)區(qū)分參數(shù)名稱和屬性名稱。 //在實(shí)例方法中修改值類型 struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { x += deltaX y += deltaY } } //在可變?法中給 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) } } 結(jié)構(gòu)體和枚舉是值類型。默認(rèn)情況下,值類型的屬性不能在它的實(shí)例方法中被修改。 但是,如果你確實(shí)需要在某個(gè)特定的方法中修改結(jié)構(gòu)體或者枚舉的屬性,你可以為這個(gè)?法選擇 可變(mutating) 行為,然后就可以從其?法內(nèi)部改變它的屬性;并且這個(gè)方法做的任何 改變都會(huì)在方法執(zhí)?結(jié)束時(shí)寫回到原始結(jié)構(gòu)中。?法還可以給它隱含的 self 屬性賦予一個(gè)全新的實(shí)例,這個(gè)新實(shí)例在?法結(jié)束時(shí)會(huì)替換現(xiàn)存實(shí)例。 -
類型方法
//定義在類型本身上調(diào)用的?法,這種方法 就叫做類型?法。在?法的 func 關(guān)鍵字之前加上關(guān)鍵字 static ,來(lái)指定類型方法。類還可以?關(guān)鍵字 class 來(lái)指定,從而允許?類重寫父類該?法的實(shí)現(xiàn)。 class SomeClass { class func someTypeMethod() { // 在這里實(shí)現(xiàn)類型方法 } } SomeClass.someTypeMethod()
12.下標(biāo)
下標(biāo):下標(biāo)允許你通過在實(shí)例名稱后?的?括號(hào)中傳?一個(gè)或者多個(gè)索引值來(lái)對(duì)實(shí)例進(jìn)行存取。定義下標(biāo)使用
subscript 關(guān)鍵字,指定一個(gè)或多個(gè)輸?參數(shù)和返回類型;與實(shí)例?法不同的是,下標(biāo)可以設(shè)定為讀寫或只讀。
1.下標(biāo)語(yǔ)法
subscript(index: Int) -> Int {
get {
// 返回一個(gè)適當(dāng)?shù)?Int 類型的值
}
set(newValue) {
// 執(zhí)行適當(dāng)?shù)馁x值操作,如果不指定參數(shù),setter 會(huì)提供?個(gè)名為 newValue 的默認(rèn)參數(shù)。
}
}