質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

317閲覧

エラー:Thread 1: Fatal error: Index out of range

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/02/07 09:51

編集2018/02/08 04:46

swift初心者です。

3択のクイズアプリを作成しています。
しかし、[ choiceButton3.setTitle(tmpArray[3] as? String, for: .normal) ]のところでエラーが出てしまいました。
分かる方、ご教授願います。

swift

1import UIKit 2 3extension Array { 4 func shuffled() -> [Element] { 5 var results = [Element]() 6 var indexes = (0 ..< count).map { $0 } 7 while indexes.count > 0 { 8 let indexOfIndexes = Int(arc4random_uniform(UInt32(indexes.count))) 9 let index = indexes[indexOfIndexes] 10 results.append(self[index]) 11 indexes.remove(at: indexOfIndexes) 12 } 13 return results 14 } 15 16} 17 18class QuizViewController: UIViewController { 19 20 var quizArray = [Any]() 21 22 var correctAnswer: Int = 0 23 24 @IBOutlet var quizTextView: UITextView! 25 26 @IBOutlet var choiceButton1: UIButton! 27 @IBOutlet var choiceButton2: UIButton! 28 @IBOutlet var choiceButton3: UIButton! 29 30 override func viewDidLoad() { 31 super.viewDidLoad() 32 33 var tmpArray = [Any]() 34 35 tmpArray.append(["問題文1",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 36 tmpArray.append(["問題文2",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 37 tmpArray.append(["問題文3",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 38 tmpArray.append(["問題文4",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 39 tmpArray.append(["問題文5",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 40 tmpArray.append(["問題文6",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 41 tmpArray.append(["問題文7",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 42 tmpArray.append(["問題文8",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 43 tmpArray.append(["問題文9",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 44 tmpArray.append(["問題文10",["選択肢1","選択肢2","選択肢3"].shuffled(),"選択肢3"]) 45 46 while (tmpArray.count > 0) { 47 let index = Int(arc4random()) % tmpArray .count 48 quizArray.append(tmpArray[index]) 49 tmpArray.remove(at: index) 50 } 51 52 choiceQuiz() 53 54 } 55 56 func choiceQuiz() { 57 58 let tmpArray = quizArray [0] as! [Any] 59 60 quizTextView.text = tmpArray [0] as! String 61 62 choiceButton1.setTitle(tmpArray[1] as? String, for: .normal) 63 choiceButton2.setTitle(tmpArray[2] as? String, for: .normal) 64 choiceButton3.setTitle(tmpArray[3] as? String, for: .normal)//ここでエラーが出る 65 } 66 67 @IBAction func choiceAnswer(sender: UIButton) { 68 69 let tmpArray = quizArray[0] as! [Any] 70 71 let text = sender.titleLabel?.text! ?? String() 72 73 if tmpArray[4] as? String == String(describing: text.suffix(text.characters.count - 5)) { 74 75 correctAnswer = correctAnswer + 1 76 } 77 78 quizArray.remove(at: 0) 79 80 if quizArray.count == 0 { 81 performSegueToResult() 82 } else { 83 choiceQuiz() 84 } 85 }

###試したこと

###バージョン
x code:9.2
swift:4.0.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fromageblanc

2018/02/07 11:12

都度tmpArrayが宣言されてますが、そのへんダイジョブですか?
fuzzball

2018/02/08 00:26

とりあえず、一番最初の var tmpArray = [Any]() を消してみて下さい。
退会済みユーザー

退会済みユーザー

2018/02/08 04:37

修正の依頼ありがとうございます。 [var tmpArray = [Any]()]はミスです。
guest

回答1

0

tmpArrayに何が入っているか考えれば分かるはず。
考えて分からなくても表示させれば分かるはず。

swift

1print("count =", tmpArray.count) 2print("[0]", tmpArray[0]) 3print("[1]", tmpArray[1]) 4print("[2]", tmpArray[2]) 5//=> count = 3 6//=> [0] 問題文1 7//=> [1] ["選択肢1", "選択肢2", "選択肢3"] 8//=> [2] 選択肢3

要素は3つしか無いんですよ。

投稿2018/02/08 05:25

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/08 06:54

ご回答ありがとうございます。 申し訳ありませんが、初心者なので、もう少し掘り下げての解答をして頂けると、ありがたいです。 よろしくお願いします。
fuzzball

2018/02/08 07:35

let tmpArray = [0, 1, 2] print(tmpArray[3]) これで同じエラーになるのは分かりますか?
退会済みユーザー

退会済みユーザー

2018/02/08 08:30

はい、分かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問