質問: Test(a:1) ※←例外表示場所 print(test1.testList[0].test) ```
回答: 1の回答: 1. `test1` を定義して、`Test`型の初期化子(`init()`)が呼び出されます。ここまでは問題ありません。 2. `self.test = a` `test`変数に`a`を代入していますね。これも問題ありません。 3. `addTest()`関数を呼び出します。 `addTest()` 関数 `{` 4. `let t: Test = Test(a: a)` ここで問題が発生します。まだまだ見ていきましょう。 5. `t` を定義して、`Test`型の初期化子(`init()`)が呼び出されます。 初期化子 `{` 6. `self.test = a` `test`変数に`a`を代入 7. `addTest()`関数を呼び出します。ここでもう一度`addTest()`関数に入ります。 `addTest()` 関数 `{` 8. 分かりましたでしょうか。初期化または関数の実行を止めない限り永遠にループしてしまいます。この後も永遠に処理は続きます...。ループしすぎて「もう我慢できない!」と、システムが自動的にプログラムを落とした結果、あのエラーが現れます。 `}` `}` `}` 2の回答: YES。上の理由で誤りです。 一定回数繰り返すと止まるように、 ``` init(a: Double, count: Int = 0){ self.test = a addTest(a: a, count + 1) } func addTest(a: Double, count: Int){ if count < 5 { let t: Test = Test(a: a, count: count) testList.append(t) } } ``` こういったやり方でループした数をカウントすればOKだと思います(もし無限に続かないといけない場合は別ですが)。 メモ: `var testList:Array = Array()` → `var testList: [Test] = []`