失敗可能イニシャライザとその継承

今回は、Swift4で失敗可能イニシャライザを継承した時のメモ。

Playgroundsで、以下のコードを貼り付けて、

//: Playground - noun: a place where people can play

import UIKit

class Foo {
    var foo: Int = 0
    
    init?(foo: Int) {
        if foo == 0 {
            return nil
        }

        self.foo = foo
    }
}

class Bar: Foo {
    var bar: Int = 0

    override init?(foo: Int) {
        print("aaa")
        super.init( foo: foo )
        print("bbb")
        self.bar = foo * 2
    }
}

let hoge = Foo( foo: 100 )
hoge?.foo
let fuga = Bar( foo: 200 )
fuga?.bar
print("=-=-=-=-=-=-=-=-=-=")
let hoge2 = Foo( foo: 0 )
let fuga2 = Bar( foo: 0 )

すると、こんな感じの結果が得られる。

まとめ

継承した先で、失敗チェックを行う必要はなさそう。
継承した先のイニシャライザでsuper.init()が失敗すると、
それ以降は実行されない。

 
そういえば、Swiftだとか、Objective-Cなのか、
Swiftって言ってもどのバージョンなのか分けてなかったので、
今後は、タグ付けくらいはしようと思う。

おしまい。

Leave a Comment