この記事では「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() {} // → エラー }