初期化(コンストラクタ)

initメソッドで初期化処理を行います。

class MyClass1 {
    // 初期化されてないプロパティ
    var str1: String
    var int1: Int

    init() {
        // initで初期化する必要がある
        str1 = "str1"
        int1 = 1
    }

    init(str1: String, int1: Int) {
        // 引数から初期化
        self.str1 = str1
        self.int1 = int1
    }
}

初期化されていないプロパティはinitで初期化する必要があります。initの引数から初期化することはよくあるでしょう。

子クラスのinit

子クラスのinitから親クラスのinitを呼ぶ場合は普通のメソッドと同じくsuperをつけて呼び出します。

class MyClass2: MyClass1 {
    var int2: Int

    // initも通常のメソッド同様、overrideキーワードが必要
    override init() {
        // 子クラスの初期化されていないプロパティを初期化してから
        int2 = 10
        // 親クラスのinitを呼び出す
        super.init()
    }

    override init(str1: String, int1: Int) {
        int2 = 10
        super.init(str1: str1, int1: int1)
    }

    // 親クラスにないinitはoverrrideキーワード必要なし
    init(int2: Int) {
        self.int2 = int2
        super.init()
    }
}

コンストラクタにoverrideキーワードをつける言語は珍しいのではないでしょうか。

終了処理(デストラクタ、ファイナライザ)

デストラクタ、ファイナライザ、Objective-Cのdeallocに相当するものがdeinitです。

init() {
    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector:"handleDidEditNoteNotification:",
        name:PSDidEditNoteNotification,
        object:nil)
}

// ()をつけるとコンパイルエラーになることに注意
deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

プロパティの解放などは自動で行われるので気にする必要はないですが、上記の例のようにNSNotificationCenterなどで使うことになるでしょう。