swiftのイニシャライザまわりでコンパイルエラーになることが多かったのでいろいろ試してみた
swiftのイニシャライザまわりでコンパイルエラーになることが多くてちょっと調べてみた。
いろいろ実験しているが本当は原理を知らないといけないと思う。
でもうんこエンジニアなので原理を理解できない
§ まとめ
最初にまとめを書いておく
定数の定義 → super.init() → メソッドを呼ぶ
の順番で呼ぶと良い
§ 実験
継承してないパターン
■ initからメソッド呼び出し
これは普通に通る
import Foundation class SampleUseCase { init() { bind() } func bind() { print("bind") } }
■ let で変数を設定した場合
let の変数が全部初期化されたあとはメソッドを呼べる
=>これは問題なく通る
■ let変数の前にメソッドをcall
Use of 'self' in method call 'bind' before all stored properties are initialized
「全てのプロパティーが初期化される前にメソッドをcallするときはselfを使え」とのこと
■ selfをつけてみる
=>selfをつけても結果は同じ。。?
継承しているパターン
■ 継承してサブクラスにした場合
=> 先にsuper.init を呼べとのこと
■ メソッドを呼ぶ前にsuper.initを呼ぶ。
=> これはOK
■ let定数の前にsuper.initをよんでみた。
=> これはダメとのこと
■ メソッドよびだしの後にsuper.initを呼んでみた
=> ダメ