配列の真骨頂、番号によるアクセスについて説明されています。今までも複数のキャラクターを作る時、名前にexpert1、expert2と通し番号をつけたことはありましたが、配列を使ってその番号を指定すると、for文などで繰り返すのに非常に便利になります(このステージではまだその恩恵はありませんが)。
今回は、for文で1〜9繰り返して.appendメソッドでteamBlu配列の中にBlu型のインスタンスを誕生させています。ここで非常に重要なのは、配列の通し番号は0から数えるという点です。for文に1〜9と書いているので、[1]〜[9]となると思いがちですがそうではありません。このコードだと9つのBlu型インスタンスがteamBlu配列内にできますが、その指定方法はteamBlu[0]〜teamBlu[8]となります。
それを踏まえて19行目以降をみると、最後の24行目でteamBlu[10]という背番号を指定しています。存在しない番号を読んでしまうと、そのプログラムは即クラッシュしてしまう深刻なバグとなります。行ごと削除してしますか、[0]〜[8]の範囲内に数字を変更してやればエラーは消えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var teamBlu: [Character] = [] // Note how many instances of Blu are in your array. // (配列にBluくんのインスタンスをいくつ作っているでしょう?) for i in 1...9 { teamBlu.append(Character(name: .blu)) } // Place Blu at each column in row 4. // (Blu君達を4行目に配置します) var columnPlacement = 0 for blu in teamBlu { world.place(blu, at: Coordinate(column: columnPlacement, row: 4)) columnPlacement += 1 } // Find the array out of bounds error. // (配列の範囲外エラーを見つけよう) teamBlu[0].jump() teamBlu[2].collectGem() teamBlu[4].jump() teamBlu[6].collectGem() teamBlu[8].jump() teamBlu[10].collectGem() //←この行を消す |
ちなみに、今までエラーがあった場所はコードの行頭に赤丸がついて教えてくれました。しかしここではそうならず、実行してその行を処理しようとした瞬間にエラーとなりコードの実行が停止します。これは配列の中身の数が実際に実行してその行を処理する瞬間になってみないと10あるかないかわからないからです。まぁ、この例ではわからなくもないですが、例えばユーザがボタンを押す度に新しいキャラクターが生まれるようなプログラムを作った場合、いつどのタイミングでキャラクター数がいくつになるかは事前には予測できません。
1 |
teamBlu[10].collectGem() |
という一行そのものは文法としてなにもおかしいところはないので、書いただけの時点でエラー判定して赤丸で教えることはできないのです。こういう実行してみないとわからないエラーは非常に発見が難しく、色々なパターンで検証しなければならず、それが足りないと、リリースした後でクラッシュしてしまうアプリとして問題になるのです。
Swift playgrounds のアプリを見つけて、その面白さに、1から2に、どんどん進んで来たものの、Arrayの中頃で、説明文を読んでも理解できない、何を目指すのか、つまりゴールがわからない、つまり、もう少しで、終了というところで、挫折しそうになった時、貴サイト、do-gugan.comに出会いました。まさに救世主、感謝でいっぱいです。ありがとうございました。最後のゴールも見ることができるし、説明がとても丁寧で、わかりやすい。一言お礼を、と思っても、お名前も、メールアドレスもわからないので、このコメント欄を使わせていただきました。本当にありがとうございました。おかげで、挫折してしまうところを助けていただきました。私は、Swiftは、初めてで、このあと、もっと勉強して、自分でアプリが作りたい、それが夢です。
お役に立ててなによりです。
私も最近はあまりSwift触れてないんですが、先日Appleのイベントで秋に出るiPadOS15ではSwift Playgroundを使ってiPadだけでアプリを作成してAppStoreに出品できるようになるとの発表がありましたね。
https://applech2.com/archives/20210608-ipados-15-support-build-ios-app-using-swift-playgrounds.html
是非頑張ってください。