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

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

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

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

Q&A

解決済

1回答

1559閲覧

Use of undeclared type '〜'エラーについて

tatuya51

総合スコア23

Swift

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

0グッド

0クリップ

投稿2020/04/18 02:26

UITableViewを使用し、セルをタップしたら画面遷移して画像を表示するものを作成していたところ、
一番下のメソッドのlet subVC: SubViewController = (segue.destination as? SubViewController)!で
Use of undeclared type 'SubViewController'とのエラーが発生しました。

参考サイトの通りに作成したつもりでしたが上手くいきません、、

参考サイト
https://i-app-tec.com/ios/tableview-cell.html

ViewController.swift

swift

1 2import UIKit 3 4class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 5 6 7 @IBOutlet weak var table: UITableView! 8 9 10 // section毎の画像配 11 let imgArray: NSArray = ["img0", "img1", 12 "img2", "img3", 13 "img4", "img5", 14 "img6", "img7"] 15 16 let label2Array: NSArray = [ 17 "8/23/16:04","8/23/16:15", 18 "8/23/16:47","8/23/17:10", 19 "8/23/17:15","8/23/17:21", 20 "8/23/17:33","8/23/17:41"] 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 } 25 26 27 var selectedImage: UIImage? 28 29 //Table Viewのセルの数を指定 30 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 31 return imgArray.count 32} 33 34 //各セルの要素を設定する 35 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 36 37 // tableCell の ID で UITableViewCell のインスタンスを生成 38 let cell = table.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) 39 40 let img = UIImage(named: imgArray[indexPath.row] as! String) 41 42 43 // Tag番号 1 で UIImageView インスタンスの生成 44 let imageView = cell.viewWithTag(1) as! UIImageView 45 imageView.image = img 46 47 // Tag番号 2 で UILabel インスタンスの生成 48 let label1 = cell.viewWithTag(2) as! UILabel 49 label1.text = "No." + String(indexPath.row + 1) 50 51 // Tag番号 3 で UILabel インスタンスの生成 52 let label2 = cell.viewWithTag(3) as! UILabel 53 label2.text = String(describing: label2Array[indexPath.row]) 54 55 return cell 56 57 } 58 // Cell の高さを120にする 59 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 60 return 120.0 61 } 62 63 // Cell が選択された場合 64 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 65 // [indexPath.row] から画像名を探し、UImage を設定 66 selectedImage = UIImage(named: imgArray[indexPath.row] as! String) 67 68 if selectedImage != nil { 69 // SubViewController へ遷移するために Segue を呼び出す 70 performSegue(withIdentifier: "toSubViewController", sender: nil) 71 } 72 } 73 74 override func prepare(for segue: UIStoryboardSegue, sender: Any!) { 75 if (segue.identifier == "toSubViewController") { 76 let subVC: SubViewController = (segue.destination as? SubViewController)! 77 // SubViewController のselectedImgに選択された画像を設定する 78 subVC.selectedImage = selectedImage 79 80 81 } 82 } 83} 84

SubViewController.swift

swift

1import Foundation 2import UIKit 3 4class SubViewController: UIViewController { 5 6 @IBOutlet weak var imageView: UIImageView! 7 8 var selectedImage: UIImage! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 imageView.image = selectedImage 14 15 16 } 17 18}

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

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

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

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

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

guest

回答1

0

ベストアンサー

タイプミスだと思いますが、質問文のコードではタイプミスではありませんね。
まず、タイプミスを疑って、その後Xcodeを再起動などなさってみてはいかがですか?

リンク先からですが、!?の使い方がどうなんでしょうか? Any! とか...

私も詳しくないですが、

今の自分ならこうかな...、ご意見お待ちしています。

swift

1override func prepare(for segue: UIStoryboardSegue, sender: Any) { 2 if (segue.identifier == "toSubViewController") { 3 let subVC: SubViewController? = segue.destination as? SubViewController 4 subVC?.selectedImage = selectedImage 5 } 6}

投稿2020/04/18 02:53

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

TsukubaDepot

2020/04/18 03:49

自動保存されていないに一票です。Xcodeの再起動も一つですが、ファイルを意図的に保存させる方法もあると思います。 SubViewController.swiftが保存されていなければ、たまに上記のようなエラーが出ることがありますね。 (tyobigorouさんは多分無意識のうちに保存されると思うので、このトラブルは少ないのかもしれません)。 一応Xcodeは自動保存してくれますが、意図的に保存してあげないと他のファイルで定義したクラス名などが自動補完などに反映されないことも多いためストレスがたまります。 ファイル名の左側のアイコン(つばめ印)が灰色の場合は保存されていないので、保存されていないファイルをクリックして Cmd+s すると保存してくれます。 ただ、それでも自動補完してくれない時があるので、その時はエラーが出たクラス名やプロパティ名を最初から打ち直した方が早い時もあるようですね。
退会済みユーザー

退会済みユーザー

2020/04/18 03:54

Cmd + shift + K か?、キーバインドいじってあるので、自分が実際に何押してるのかわかってないけど…
tatuya51

2020/04/18 04:35

ファイル名のアイコンがグレーになっていたので保存したところ、コードを変更することなく無事実行することができました。 お二方ともご丁寧にご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問