Swiftでクイズアプリを作っております。和音の音声が鳴り、当てはまるものを4つの選択肢から選ぶというものなんですが、正解の選択肢を選んでも不正解の選択肢を選んでも間違っている判定になっていします。
毎度、音声に当てはまる正解の選択肢は必ず表示されますので、そこは問題ありません。
該当のソースコード
Swift
1 var csvArray: [String] = [] 2 var quizArray: [String] = [] 3 quizArray = csvArray[quizCount].components(separatedBy: ",") 4//CSVファイル(csvArray)に複数の問題の選択肢が含まれております。quizCountはCSVファイルの場所(行目)を示します。1行目には1問目、2行目には2問目、、、 5 @IBAction func btnAction(sender: UIButton){ 6 if sender.tag == Int(quizArray[0]){ 7//quizArray[0]は正解の選択肢で、他のindex(1〜)は不正解の選択肢 8 print("正解") 9 correctCount += 1 10 judgeImageView.image = UIImage(named: "correct") 11 12 }else { 13 print ("不正解") 14 judgeImageView.image = UIImage(named: "incorrect") 15 16 } 17 print("スコア:(correctCount)") 18 judgeImageView.isHidden = false 19 answerButton1.isEnabled = false 20 answerButton2.isEnabled = false 21 answerButton3.isEnabled = false 22 answerButton4.isEnabled = false 23 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5){ 24 self.judgeImageView.isHidden = true 25 self.answerButton1.isEnabled = true 26 self.answerButton2.isEnabled = true 27 self.answerButton3.isEnabled = true 28 self.answerButton4.isEnabled = true 29 self.nextQuiz() 30 } 31 32 }
実現したいこと
if sender.tag == Int(quizArray[0])では数字での比較になっているので、これを選択肢で選ばれた文字をquizArray[0]と比較する文字型での比較に変更したいと考えております。
if sender.tagはMain.storyboardにある選択肢のボタンを押された時に送られるタグですが、これをなんとかして文字の情報として送る方法はありませんでしょうか?
tagの数値はattributes inspectorで設定しました。
補足情報(FW/ツールのバージョンなど)
Xcode12.4
sender.tagとquizArray[0]中身を確認して
書いてください。
すみません、中身を確認というのは中身を具体的に示して記入すればよろしいでしょうか。
質問内容をsender.tagに絞って更新しました。よろしくお願いします。
@IBAction func btnAction(sender: UIButton){
print(sender.tag,quizArray[0])
上の行追加して、何が出力されているかを確認してください。
シミュレーター上のボタンに表示されてる文字と、printで表示されてる文字が一致していない事が分かりました。大きな発見です。ありがとうございます。
比較したい文字列が何かわからないと、回答がつかないとおもいますが
具体的に書くべきではないでしょうか?
sender.tag は Int 型なので、文字列にするには工夫が必要です。というか、する必要もないはず。
確か「配列は0が問題文、1が正解番号、2,3,4,5は選択肢となります。」だったと思いますが、各ボタンの tag に 2, 3, 4, 5 を入れておいて、1 の正解番号と比べればいいのでは。
あなたの回答
tips
プレビュー