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

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

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

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

Swift

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

Q&A

解決済

1回答

821閲覧

swift Ambiguous use of 'subscript(_:)' エラー

aa23021

総合スコア3

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/05/09 10:37

編集2020/05/09 11:50

実現したいこと、エラー内容

クイズアプリ作成中、読み上げ機能を入れたくてimport AVFoundationとコードを書いたのですが、それまでにはエラーの表示も出ずシミュレーターでちゃんと起動してたのですが急に入れた後にAmbiguous use of 'subscript(_:)'というエラー表示が出てしまい困ってます。

###ソースコード

import UIKit import AVFoundation class quiz_: UIViewController { @IBOutlet weak var label00: UILabel! @IBOutlet weak var label01: UILabel! @IBOutlet var button01: [UIButton]!

var

1 var questionNumber = 0 2 var correctAnswerNumber = 0 3 4 //tiemr 5 var remainingTime = 15 6 var quizTimer: Timer? 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 csvToArray() 12 13 question() 14 15 } 16 17 func csvToArray() { 18 if let csvPath = Bundle.main.path(forResource: "クイズ問題", ofType: "csv") { 19 do { 20 21 let csvStr = try String(contentsOfFile: csvPath, encoding: String.Encoding.utf8) 22 let csvArr = csvStr.split(separator: "\n").map(String.init) 23 for csvFile in csvArr { 24 let csvsplit = csvFile .components(separatedBy: ",") 25 csvArray.append(csvsplit as AnyObject) 26 27 } 28 print(csvArray) 29 30 }catch let error as NSError { 31 32 print(error.localizedDescription) 33 34 } 35 } 36 } 37 38 func question() { 39 if questionNumber >= csvArray.count { 40 let alert = UIAlertController(title: "漫画クイズ", message: "5問中(correctAnswerNumber)問正解", preferredStyle: .alert) 41 let action = UIAlertAction(title: "終了", style: .default, handler: { 42 (_) in self.dismiss(animated: true, completion: nil) 43 }) 44 alert.addAction(action) 45 present(alert, animated: true, completion: nil) 46 return 47 } 48 49 50 let problemData = csvArray[questionNumber] 51 label00.text = "第" + "(questionNumber+1)問" 52 53 let number = numberList() 54 for i in 0...3 { 55 button01[i].setTitle((problemData[number[i]]as AnyObject as! String), for: .normal)**←ここでAmbiguous use of 'subscript(_:)' というエラーが出ます。**

長々とすみません。
よろしくお願いします????‍♂️

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

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

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

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

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

hoshi-takanori

2020/05/09 11:23

さすがにこの長さのコードはテキストで貼ってほしいですね。で、number の型がよくわかりませんが、import AVFoundation しなくてもエラーになる気がします。csvArray や problemData の型は AnyObject じゃなくてちゃんとした型を宣言することをお勧めします。
aa23021

2020/05/09 11:55

コメントありがとうございます。 初めての投稿でテキストの貼り方がわかりませんでした????失礼しました????‍♂️ import AVFoundation入れる前まではシミュレーターでちゃんと起動していたのですが、入れた後にエラーが出ました。 csvArray や problemData の型ですね!はい、参考にさせていただきます。ご指摘有り難うございます。
guest

回答1

0

ベストアンサー

csvArray の型が [AnyObject] になってたと思いますが、[[String]] にすればいいと思います。
CSV の各行を , で分割した配列が [String] で、それが複数行あるので [[String]] (文字列の配列の配列) になります。

diff

1- var csvArray : [AnyObject] = [] 2+ var csvArray : [[String]] = [] 3 var questionNumber = 0 4 var correctAnswerNumber = 0 5 6 // 略 7 8 func csvToArray() { 9 // 略 10 for csvFile in csvArr { 11 let csvsplit = csvFile .components(separatedBy: ",") 12- csvArray.append(csvsplit as AnyObject) 13+ csvArray.append(csvsplit) 14 15 } 16 // 略 17 18 func question() { 19 // 略 20 21 let number = numberList() 22 for i in 0...3 { 23- button01[i].setTitle((problemData[number[i]]as AnyObject as! String), for: .normal) 24+ button01[i].setTitle(problemData[number[i]], for: .normal) 25 }

あと、余計なお世話ですが、クラスの名前 (quiz_) の先頭は大文字にするのが一般的です。QuizViewController はいかがでしょうか。
参考: Swiftガイドライン的な - Qiita

投稿2020/05/09 12:18

編集2020/05/09 12:19
hoshi-takanori

総合スコア7895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問