前提
私はXcodeをいじり始めて2ヶ月ばかりの初心者です。書籍やネット上の情報を参照しながら制作を進めております。
実現したいこと
約1000問収録のクイズアプリを作成中です。その中に、png形式の画像を利用した問題の章を含めるつもりでおります。
発生している問題・エラーメッセージ
Assets.xcassetsに該当のpng画像をセットし、その画像のタイトルをcsvファイルの0番目に入力しました。それでcsvファイルから該当の画像データを表示させられるかと思ったのですが、以下「問題点1・2・3」のように上手くいきません。
該当のソースコード
Swift
1import UIKit 2 3class ZuzouViewController: UIViewController { 4 @IBOutlet weak var zuzouNumberLabel: UILabel! 5 //↓ここでzuzouImageViewの変数を宣言し、StoryBoardのUIImageViewとも紐付けしてあります 6 @IBOutlet weak var zuzouImageView: UIImageView! 7 @IBOutlet weak var zuzouButton1: UIButton! 8 @IBOutlet weak var zuzouButton2: UIButton! 9 @IBOutlet weak var zuzouButton3: UIButton! 10 @IBOutlet weak var zuzouButton4: UIButton! 11 @IBOutlet weak var judgeImageView: UIImageView! 12 13 var csvArray: [String] = [] 14 var zuzouArray: [String] = [] 15 var zuzouCount = 0 16 var correctCount = 0 17 var selectZuzou = 0 18 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 22 csvArray = loadCSV(fileName: "Zuzou\(selectZuzou)") 23 24 zuzouArray = csvArray[zuzouCount].components(separatedBy: ",") 25 26 zuzouNumberLabel.text = "図像地図\(selectZuzou):第\(zuzouCount + 1)問" 27 let Path = Bundle.main.path(forResource: zuzouArray[0]as AnyObject as? String, ofType: nil) 28 //(問題点1)↓ここで「定数のzuzouImageViewは存在しない」といった趣旨の黄色メッセージが出ることがあります。letをvarに変えると、「letにしろ」と言われます。 29 let zuzouImageView: UIImage = UIImage(contentsOfFile: Path!)! 30 31 //(問題点2)↓ここでzuzouImageViewについて、Value of type 'UIImage' has no member 'image'というエラーが出ます 32 zuzouImageView.image = (zuzouArray[0]) 33 zuzouButton1.titleLabel?.numberOfLines = 0 34 zuzouButton1.setTitle(zuzouArray[2], for: .normal) 35 zuzouButton2.titleLabel?.numberOfLines = 0 36 zuzouButton2.setTitle(zuzouArray[3], for: .normal) 37 zuzouButton3.titleLabel?.numberOfLines = 0 38 zuzouButton3.setTitle(zuzouArray[4], for: .normal) 39 zuzouButton4.titleLabel?.numberOfLines = 0 40 zuzouButton4.setTitle(zuzouArray[5], for: .normal) 41 // Do any additional setup after loading the view. 42 } 43 44 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 45 let ZuzouResultVC = segue.destination as! ZuzouResultViewController 46 ZuzouResultVC.correct = correctCount 47 ZuzouResultVC.zuzouNumber = selectZuzou 48 } 49 50 @IBAction func btnAction(sender:UIButton) { 51 if sender.tag == Int(zuzouArray[1]) { 52 print("正解") 53 correctCount += 1 54 judgeImageView.image = UIImage(named: "correct") 55 } else { 56 print("不正解") 57 judgeImageView.image = UIImage(named: "incorrect") 58 } 59 print("スコア:\(correctCount)") 60 judgeImageView.isHidden = false 61 zuzouButton1.isEnabled = false 62 zuzouButton2.isEnabled = false 63 zuzouButton3.isEnabled = false 64 zuzouButton4.isEnabled = false 65 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 66 self.judgeImageView.isHidden = true 67 self.zuzouButton1.isEnabled = true 68 self.zuzouButton2.isEnabled = true 69 self.zuzouButton3.isEnabled = true 70 self.zuzouButton4.isEnabled = true 71 self.nextZuzou() 72 } 73 74 } 75 76 func nextZuzou() { 77 zuzouCount += 1 78 if zuzouCount < csvArray.count { 79 zuzouArray = csvArray[zuzouCount].components(separatedBy: ",") 80 zuzouNumberLabel.text = "図像地図\(selectZuzou):第\(zuzouCount + 1)問" 81 //(問題点3)↓ここでCannot assign value of type 'String' to type 'UIImage?'というエラーメッセージが出ます。おそらく型のことを言っていて、画像表示はString型じゃないよと言われているのだと思いますが、どういう型変換をすれば良いのかわかりません。また問題点1・2と違い、個々のzuzouImageViewは、予測変換で出てきて色も黒色ではなく緑色になります。 82 zuzouImageView.image = zuzouArray[0] 83 zuzouButton1.setTitle(zuzouArray[2], for: .normal) 84 zuzouButton2.setTitle(zuzouArray[3], for: .normal) 85 zuzouButton3.setTitle(zuzouArray[4], for: .normal) 86 zuzouButton4.setTitle(zuzouArray[5], for: .normal) 87 88 } else { 89 performSegue(withIdentifier: "toZuzouResultVC", sender: nil) 90 } 91 } 92 93 func loadCSV(fileName: String) -> [String] { 94 let csvBundle = Bundle.main.path(forResource: fileName, ofType: "csv")! 95 do { 96 let csvData = try String(contentsOfFile: csvBundle, encoding: String.Encoding.utf8) 97 let lineChange = csvData.replacingOccurrences(of: "\r", with: "\n") 98 csvArray = lineChange.components(separatedBy: "\n") 99 csvArray.removeLast() 100 } catch { 101 print("エラー") 102 } 103 return csvArray 104 }``` 105 106### 試したこと 107 108何をどう試せばよいのかわからず、こちらのサイトに登録し、お伺いさせていただきました。よろしくお願いします。画像の表示はStringではなく何型だったか調べてはみたのですが、それすらわかりませんでした。 109 110### 補足情報(FW/ツールのバージョンなど) 111 112Xcode13.3です。
あなたの回答
tips
プレビュー