swift中的方法

方法是關聯了特定類型的函數。類,結構體以及枚舉都能定義實例方法,方法封裝了給定類型特定的任務和功能。類,結構體和枚舉同樣可以定義類型方法,這是與類型本身關聯的方法。類型方法與Objective-C中的類方法相似。

事實上在 結構體和枚舉中定義方法是 Swift 語言與 C 語言和 Objective-C 的主要區別。在 Objective-C 中,類是 唯一能定義方法的類型。但是在 Swift ,你可以選擇無論類,結構體還是方法,它們都擁有強大的靈活性來在你 創建的類型中定義方法。

一、實例方法

實例方法是屬於特定類實例、結構體實力老或者枚舉實例的函數。
實例方法與函數的語法完全相同。

實例方法默認可以訪問同類下所有其他實例方法和屬 性。實例方法只能在類型的具體實例裏被調用。它不能在獨立於實例而被調用。

1、self屬性

每一個類的實例都隱含一個叫做 self的屬性,它完完全全與實例本身相等。你可以使用 self屬性來在當前實例當中調用它自身的方法。
實際上,你不需要經常在代碼中寫 self。

1  struct Point {
2      var x = 0.0, y = 0.0
3      func isToTheRightOf(x: Double) -> Bool {
4         return self.x > x
5      } 
6  }

除去 self 前綴,Swift 將會假定兩個 x 都是叫做 x 的方法形式參數。

2、在實例方法中修改值類型

結構體和枚舉是值類型。默認情況下,值類型屬性不能被自身的實例方法修改。
總之,如果你需要在特定的方法中修改結構體或者枚舉的屬性,你可以選擇將這個方法異變。然後這個方法就可 以在方法中異變(嗯,改變)它的屬性了,並且任何改變在方法結束的時候都會寫入到原始的結構體中。方法同 樣可以指定一個全新的實例給它隱含的 self屬性,並且這個新的實例將會在方法結束的時候替換掉現存的這個實 例。
你可以選擇在 func關鍵字前放一個 mutating關鍵字來使用這個行爲:

1  struct Point {
2      var x = 0.0, y = 0.0
3      mutating func moveBy(x deltaX: Double, y deltaY: Double) {
4          x += deltaX 
5          y += deltaY
6      }
7  }
8 var somePoint = Point(x: 1.0, y: 1.0)
9 somePoint.moveBy(x: 2.0, y: 3.0)
10 print("The point is now at (\(somePoint.x), \(somePoint.y))")
11 // prints "The point is now at (3.0, 4.0)"
3、在異變方法裏指定自身
1  struct Point {
2      var x = 0.0, y = 0.0
3      mutating func moveBy(x deltaX: Double, y deltaY: Double) {
4          self = Point(x: x + deltaX, y: y + deltaY)
5      }
6  }      

這次的異變方法 moveBy(x:y:)創建了一個 x和 y設置在目的座標的全新的結構體。調用這個版本的方法和的結果 會和之前那個完全一樣。

枚舉的異變方法可以設置隱含的 self屬性爲相同枚舉裏的不同成員:

1  enum TriStateSwitch {
2      case off, low, high
3      mutating func next() {
4          switch self {
5          case .off:
6              self = .low
7          case .low:
8              self = .high
9          case .high:
10             self = .off
11          }
12      }
13  }
14  var ovenLight = TriStateSwitch.low
15  ovenLight.next()
16  // ovenLight is now equal to .high
17  ovenLight.next()
18  // ovenLight is now equal to .off

這個栗子定義了一個三種開關狀態的枚舉。每次調用 next()方法時,這個開關就會在三種不同的電力狀態( Off , low和 high)下切換。

二、類型方法

定義在類型本身調用的方法,被稱爲類型方法
你可以通過在 func關鍵字之前使用 static關鍵字來明確一個類型方法。類同樣可以使用 class關鍵字來允許子類重寫父類對類型方法的實現。

注意:在 Objective-C 中,你只能在 Objective-C 的類中定義類級別的方法。但是在 Swift 裏,你可以在所有的類裏定義類級別的方法,還有結構體和枚舉。每一個類方法都能夠對它自身的類範圍顯式生效。

類型方法和實例方法一樣使用點語法調用。不過,你得在類上調用類型方法,而不是這個類的實例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章