第十三章方法

6646 ワード

ソース
Official documents
 
方法は2つに分けられます.
  • インスタンスメソッド(Instance Methods)
  • タイプメソッド(Type Methods)
  •  
    メソッドは基本的に関数と同じです

    インスタンスメソッド(Instance Methods)


     

    インスタンスメソッドを定義します。

    class Counter { 
      var count = 0 
      func increment() { 
        count++ 
      } 
      func incrementBy(amount: Int) { 
        count += amount 
      } 
      func reset() { 
        count = 0 
      } 
    } 

    呼び出し方法:

    let counter = Counter() 
    //  0 
    counter.increment() 
    //  1 
    counter.incrementBy(5) 
    //  6 
    counter.reset() 
    //  0 

     

    メソッドのパラメータ名

  • Swiftデフォルトメソッドの最初のパラメータ名は、内部パラメータ名としてのみ使用されます.Swiftが外部パラメータ名に拡張する必要がある場合は、パラメータ名に「#」を付けて
  • を実現する必要がある.
  • メソッドの2番目および後続のパラメータのパラメータ名は、内部および外部のパラメータ名に自動的に拡張されます.このような自動拡張を遮断するには、パラメータ名に「-」を付けて
  • を実現することができる.
    class Counter { 
      var count: Int = 0 
      func incre(amount: Int, number: Int) { 
        count += amount * number 
      } 
    } 

    increメソッドにはamountとnumberの2つのパラメータがあります.デフォルトでは、Swiftはamountをローカル名としてのみ使用しますが、numberをローカル名として外部名として使用します.次に、このメソッドを呼び出します.
    let counter = Counter() 
    counter.incrementBy(5, numberOfTimes: 3) 
    // counter value is now 15 

     

    self属性(The self Property)


    selfはインスタンス自体を表す
    上記の例のincrementメソッドは、次のように書くこともできます.
    func increment() { 
      self.count++ 
    } 

     

    へんかほう


    一般的に、値タイプのプロパティはインスタンスメソッドでは変更できませんが、変更メソッドを使用して変更できます.
    変異メソッドを定義するにはmutatingキーワードをfuncの前に置く必要があります
    変更方法の定義
    struct Point { 
      var x = 0.0, y = 0.0 mutating func moveByX(deltaX: Double, y deltaY: Double) { 
        x += deltaX 
        y += deltaY 
      } 
    } 

    変更方法の使用
    var somePoint = Point(x: 1.0, y: 1.0) 
    somePoint.moveByX(2.0, y: 3.0) 
    println("The point is now at (\(somePoint.x), \(somePoint.y))") 
    //   "The point is now at (3.0, 4.0)" 

     
    変化メソッドでselfに値を割り当てる
    struct Point { 
      var x = 0.0, y = 0.0 
      mutating func moveByX(deltaX: Double, y deltaY: Double) { 
        self = Point(x: x + deltaX, y: y + deltaY) 
      } 
    } 

     
    列挙の変化方法
    enum TriStateSwitch { 
      case Off, Low, High 
      mutating func next() { 
        switch self { 
        case Off: 
          self = Low
        case Low:
          self = High
        case High:
          self = Off
        }
      }
    }
    var ovenLight = TriStateSwitch.Low 
    ovenLight.next() 
    // ovenLight   .High 
    ovenLight.next() 
    // ovenLight   .Off 

    上記の例では、3状態スイッチの列挙を定義した.nextメソッドが呼び出されるたびに、スイッチは異なる電源状態(Off,Low,High)の前に循環的に切り替えられます.
     

    タイプメソッド(Type Methods)


     
  • クラスのタイプメソッドを宣言し、メソッドのfuncキーワードの前にキーワードclass
  • を追加する
  • は、構造体および列挙のタイプメソッドを宣言し、メソッドのfuncキーワードの前にキーワードstaticを追加する.

  •  

    クラスのタイプメソッドの宣言

    class SomeClass { 
      class func someTypeMethod() { 
        // type method implementation goes here 
      } 
    } 
    SomeClass.someTypeMethod() 

    構造体のタイプを宣言する方法

    struct LevelTracker { 
      static var highestUnlockedLevel = 1
    static func unlockLevel(level: Int) { if level > highestUnlockedLevel {
        highestUnlockedLevel = level
      } } static func levelIsUnlocked(level: Int) -> Bool { return level <= highestUnlockedLevel } }

     
    2015-03-21
    20:27:29