しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門11 − The Swift Programming Languageを読んでみる

この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。

The Swift Programming Language (Swift 2.1): About Swift

読んだ所

今回はPropertiesという項目を読みました。

The Swift Programming Language (Swift 2.1): Properties

学んだこと

lazy修飾子

lazyという修飾子を使えばプロパティーへの初期値の代入を利用時にする事ができます。

普通はプロパティーの初期値はクラスの初期化時に行われます。
その為下の例では"init"が一番最初に出力されます。

// init → 1 → 2の順番でログが表示される
class MyClass {
    init() {
        print("init")
    }
}

class MainClass {
    var prop = MyClass()

    func method() {
       print(1)
       print(prop)
       print(2)
    }
}

MainClass().method()

lazyを使う事で、1 → init → 2 の順番でログが表示されます。

// 1 → init → 2の順番でログが表示される
class MyClass {
    init() {
        print("init")
    }
}

class MainClass {
    lazy var prop = MyClass()

    func method() {
       print(1)
       print(prop)
       print(2)
    }
}

MainClass().method()

classとstaticの違い

Swiftでは似ている修飾子としてclassとstaticの2種類があります。

違いは下の通りです。

class

class let a = ""といった普通の使い方ができない。
サブクラスからオーバーライドできる。

static

static let a = ""といった普通の使い方ができる。
サブクラスからオーバーライドできない。

実例

class MyClass {
    class var a = "" // → エラー
    class var b: String {
        return ""
    }
    static var c = ""
    static var d: String {
        return ""
    }
}

class MyClass2: MyClass {
    override class var a = "" // → エラー
    override class var b: String {
        return ""
    }
    override static var c = "" // → エラー
    override static var d: String { // → エラー
        return ""
    }
}