Swiftメモ:方法

4419 ワード

インスタンスメソッド(Instance Methods)
インスタンス・メソッドは、特定のクラス、構造体、または列挙タイプのインスタンスに属するメソッドです.インスタンス・メソッドは、インスタンスのプロパティにアクセスおよび変更する方法またはインスタンスの目的に関連する機能を提供し、インスタンスの機能をサポートします.
class counter
{
    var count = 0
    func increment() {
        count += 1
    }

    func incrementBy(amount: Int) {
        count += amount
    }

    func reset() {
        count = 0
    }
}

let cou = counter()
print("\(cou.count)")
cou.increment()

print("\(cou.count)")

cou.incrementBy(5)
print("\(cou.count)")

cou.reset()
print("\(cou.count)")

//0
//1
//6
//0

counterクラスは、3つのインスタンスメソッドを定義します.
incrementはカウンタを1つずつ増やします.incrementBy(amount:Int)はカウンタを指定した整数値で増加させる.resetはカウンタを0にリセットします.
Swiftの方法はObjective-Cの方法と極めて似ている.Objective-Cのように、Swiftのメソッドの名前は、通常、with、for、byなどのメソッドの最初のパラメータを1つのメソッドで指します.前のcounterクラスの例ではincrementBy(:)メソッドがそうです.
self属性(The self Property)
タイプの各インスタンスにはselfという暗黙的な属性があり、selfはインスタンス自体に完全に等しい.この隠しselfプロパティは、インスタンスのインスタンスメソッドで現在のインスタンスを参照するために使用できます.
 func increment() {
        self.count += 1
    }

実際、一般的にはコードにselfを書くことはありません.インスタンスメソッドのパラメータ名がインスタンスのプロパティ名と同じ場合のみです.この場合、パラメータ名は優先権を有し、属性を参照する際により厳密な方法を使用する必要があります.この場合selfプロパティを使用してパラメータ名とプロパティ名を区別します.
struct point {
    var x = 2
    func istoright(x:Int) -> Bool {
        return self.x > x
    }
}

let somepoint  = point()

if somepoint.istoright(1)
{
    print(" 0")
}

self接頭辞を使用しない場合、Swiftは、2回使用したxがxという名前の関数パラメータを指すと考えている.
インスタンスメソッドで値タイプを変更する(Modifying Value Type from Within Instance Methods)
構造体と列挙は値タイプです.デフォルトでは、値タイプのプロパティはインスタンスメソッドで変更できません.
しかし、特定の方法で構造体または列挙された属性を修正する必要がある場合、この方法のために可変(mutating)動作を選択し、その方法の内部からその属性を変更することができる.このメソッドの変更は、メソッドの実行が終了すると元の構造に戻ります.メソッドは、メソッドの終了時に既存のインスタンスを置き換える、隠されたselfプロパティに新しいインスタンスを与えることもできます.
struct point {
    var x = 2,y = 3
   mutating func istoright(x:Int,y :Int) {
        self.x = x + self.x
        self.y = y + self.y
    }
}

var somepoint  = point()

somepoint.istoright(1, y: 2)

print("x = \(somepoint.x), y = \(somepoint.y)")
//x = 3, y = 5

タイプメソッド(Type Methods)
インスタンスメソッドは、あるタイプのインスタンスによって呼び出されるメソッドです.タイプ自体で呼び出されるメソッドを定義することもでき、このメソッドをタイプメソッド(Type Methods)と呼ぶ.メソッドのfuncキーワードの前にキーワードstaticを付けてタイプメソッドを指定します.クラスはまた、キーワードclassを使用して、サブクラスが親クラスを書き換える方法を実装することもできます.
Objective-Cでは、Objective-Cのクラスタイプ(classes)のタイプメソッド(type-level methods)しか定義できません.Swiftでは、すべてのクラス、構造体、列挙のタイプメソッドを定義できます.各タイプのメソッドは、サポートされているタイプによって明示的に含まれます.
class someClass {
   static func sometype() {
        print(" ")
    }
}
someClass.sometype()
//