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

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

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

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

Swift

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

Q&A

1回答

2342閲覧

swift Thread 1: Fatal error: Index out of range

Kumt

総合スコア4

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/21 13:26

answer = questionSourceDataArray[1]に上記のエラーが発生します。

swift

1import Foundation 2 3class QuestionData { 4 //問題文 5 var question: String 6 var answer: String 7 var answer2: String 8 //正解番号 9 var selectAnswer: Int 10// ユーザーが選択した番号 11 var userSelect:Int? 12// 問題番号 13 var questionNo:Int = 0 14 15 init(questionSourceDataArray: [String]) { 16 question = questionSourceDataArray[0] 17 answer = questionSourceDataArray[1] 18 answer2 = questionSourceDataArray[2] 19 selectAnswer = Int(questionSourceDataArray[3])! 20 } 21// 問題文が一致しているかの判定 22 func correct() -> Bool { 23 if selectAnswer == userSelect { 24 return true 25 } 26 return false 27 } 28 } 29 30// 問題管理クラス 31class QuestionDataManager { 32 33 static let sharedInstance = QuestionDataManager() 34// 問題の格納配列 35 var questionDataAdd = [QuestionData]() 36// 問題番号の管理 37 var nowQuestionIndex: Int = 0 38 private init() { 39 40 } 41// 問題文を読み込む処理 42 func loadQuestion() { 43 questionDataAdd.removeAll() 44 nowQuestionIndex = 0 45// ファイルの読み込み 46 guard let csvFilePath = Bundle.main.path(forResource: "question", ofType: "csv") else { 47 print("csvファイルが取得できません") 48 return 49 } 50// ファイルを文字列で呼び出す 51 do { 52 let csvStringFaile = try String(contentsOfFile: csvFilePath, encoding: String.Encoding.utf8) 53 54 csvStringFaile.enumerateLines(invoking: { (line, stop) in 55 let questionSourceDataArray = line.components(separatedBy: ",") 56 57 let questionData = QuestionData(questionSourceDataArray: questionSourceDataArray) 58 59 self.questionDataAdd.append(questionData) 60 61 questionData.questionNo = self.questionDataAdd.count 62} 63 ) 64 } catch let error { 65 print("csvファイルを読み込むことができませんでした:(error)") 66 return 67 } 68 } 69 70 func nextQuestion() -> QuestionData? { 71 if nowQuestionIndex < questionDataAdd.count { 72 let nextQuestion = questionDataAdd[nowQuestionIndex] 73 nowQuestionIndex += 1 74 return nextQuestion 75 } 76 return nil 77 } 78 } 79 80

Fatal error: Index out of range: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.8/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444
2020-06-21 22:19:07.590357+0900 FX quiz[63527:5373612] Fatal error: Index out of range: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.8/swift/stdlib/public/core/ContiguousArrayBuffer.swift, line 444
(lldb)

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

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

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

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

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

guest

回答1

0

CSVを読み込んだ際のこの手のエラーは下記の部分で発生するケースをよく見ます。

let questionSourceDataArray = line.components(separatedBy: ",") . . question = questionSourceDataArray[0] answer = questionSourceDataArray[1] . .

QuestionDataのイニシャライザに渡す前にquestionSourceDataArrayの要素数をチェックしてみてください。
CSVファイルの最後に改行がある場合、空文字""に対して処理することになるので、上記のコードではIndex out of rangeの警告が発生します。

投稿2020/06/21 13:44

編集2020/06/21 13:47
Kapustin

総合スコア1186

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問