しめ鯖日記

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

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

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

The Swift Programming Language (Swift 2.1): About Swift

読んだ所

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

The Swift Programming Language (Swift 2.1): Inheritance

学んだこと

プロパティーの継承

Computedプロパティーは下のように継承できます。
superで親クラスのプロパティーも呼べます。

class Class1 {
    var prop: String {
        return ""
    }
}

class Class2: Class1 {
    override var prop: String {
        return super.prop
    }
}

Storedプロパティーも継承できます。

class Class1 {
    var prop = ""
}

class Class2: Class1 {
    override var prop: String {
        get { return super.prop }
        set {}
    }
}

その逆は難しいようです。

class Class1 {
    var prop: String {
        return ""
    }
}

class Class2: Class1 {
    override let prop = "" // → これはエラー
}

subscriptの継承

subscriptも継承する事ができます。

class Class1 {
    subscript(a: Int) -> String {
        return ""
    }
}

class Class2: Class1 {
    override subscript(a: Int) -> String {
        return super[a]
    }
}

Computed PropertyでdidSetを使う

下のように継承すればdidSetを付ける事ができます。

class Class1 {
    var prop: String {
        get { return "sss" }
        set {}
    }
}

class Class2: Class1 {
    override var prop: String { // prop: String = "" はエラーになる
        didSet { print(111) }
    }
}

print(Class2().prop) // → sss
Class2().prop = "AA"

final修飾子

final修飾子を付けると継承ができなくなります。
これはメソッド・プロパティーの両方に使えます。

class Class1 {
    final var prop: String {
        get { return "sss" }
        set {}
    }
    final func a() {}
}

class Class2: Class1 {
    override var prop: String { // → エラー
        didSet { print(111) }
    }
    override func a() {} // → エラー
}