しょうもないけど知らないとできないSwiftの初期化
はい、おばんですー。
時間がないのでさくっとねー。
こんなソース書いちゃうやつでもプログラマとして働けるので、みんなもっと勇気を持って欲しい(イミフ
環境はXcode6.3。
class TestApp { var hoge: Int init() { self.setValue() } func setValue() -> Void { self.hoge = 0 } }
こうやるとこういう風に怒られる。
- Return from initializer without initializing all stored properties
'self.hoge' not initialized - Use of 'self' in method call 'setValue' before all stored properties are initialized
'self.hoge' not initialized - Variable 'self.hoge' used before being initialized
要するに、初期値入れろや、と怒られているっぽい。
しかし、初期化自体はsetValue()でやってるっしょ?
なんで怒られなあかんの。
というわけで、変数"hoge"をオプショナルにしてみたりガード式入れてみたりといろいろしてみたのだが、どうあってもエラーが消えない。
正解
保存型プロパティは、宣言時のデフォルト値か、初期化関数内で初期値の設定しないとダメなんだってさ。
あくまでinit()の中で初期化するのが正しいのであって、そっから先呼ばれるメソッド内で初期化するのはあかんらしい。
ここで言う保存型プロパティっていうのはメンバ変数"hoge"のこと。
class TestApp { var hoge: Int init() { self.hoge = -1 self.setValue() } func setValue() -> Void { self.hoge = 0 } }
さらに、初期化関数内で初期値を設定するよりは、宣言時にデフォルト値として与える方が望ましいらしい。
class TestApp { var hoge: Int = -1 init() { self.setValue() } func setValue() -> Void { self.hoge = 0 } }
以上。
寝るです。