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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

解決済

Use of undeclared type エラーを解決したい

watasuke
watasuke

総合スコア27

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

2回答

0評価

0クリップ

18627閲覧

投稿2017/03/15 06:39

###前提・実現したいこと
以下を参考にして、リアルタイムチャットを実現したいです。

【Swift】リアルタイムチャットを実現するFirebaseでCRUD(データ作成、読み込み、更新、削除)をやってみる
###発生している問題・エラーメッセージ

swift3

let cell = table.dequeueReusableCell(withIdentifier: "ListCell") as! ListTableViewCell

という箇所で

Use of undeclared type "ListTableViewCell"

というエラーが出ます。
宣言されていない型を使うな!!ということだと思うのですが、どこがまずっているのでしょうか?
###該当のソースコード

swift3

import UIKit import Firebase //Firebaseをインポート class ListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var table: UITableView!//送信したデータを表示するTableView var contentArray: [FIRDataSnapshot] = [] //Fetchしたデータを入れておく配列、この配列をTableViewで表示 var snap: FIRDataSnapshot! //FetchしたSnapshotsを格納する変数 let ref = FIRDatabase.database().reference() //Firebaseのルートを宣言しておく override func viewDidLoad() { super.viewDidLoad() //データを読み込むためのメソッド self.read() //TableViewCellをNib登録、カスタムクラスを作成 table.register(UINib(nibName: "ListTableViewCell", bundle: nil), forCellReuseIdentifier: "ListCell") table.delegate = self //デリゲートをセット table.dataSource = self //デリゲートをセット // Do any additional setup after loading the view. } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //Cellの高さを調節 table.estimatedRowHeight = 56 table.rowHeight = UITableViewAutomaticDimension } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) //画面が消えたときに、Firebaseのデータ読み取りのObserverを削除しておく ref.removeAllObservers() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //ViewControllerへの遷移のボタン @IBAction func didSelectAdd() { self.transition() } //ViewControllerへの遷移 func transition() { self.performSegue(withIdentifier: "toView", sender: self) } //セルの数 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return contentArray.count } //返すセルを決める func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //xibとカスタムクラスで作成したCellのインスタンスを作成 let cell = table.dequeueReusableCell(withIdentifier: "ListCell") as! ListTableViewCell //配列の該当のデータをitemという定数に代入 let item = contentArray[indexPath.row] //itemの中身を辞書型に変換 let content = item.value as! Dictionary<String, AnyObject> //contentという添字で保存していた投稿内容を表示 cell.contentLabel.text = String(describing: content["content"]!) //dateという添字で保存していた投稿時間をtimeという定数に代入 let time = content["date"] as! TimeInterval //getDate関数を使って、時間をtimestampから年月日に変換して表示 cell.postDateLabel.text = self.getDate(number: time/1000) return cell } func read() { //FIRDataEventTypeを.Valueにすることにより、なにかしらの変化があった時に、実行 //今回は、childでユーザーIDを指定することで、ユーザーが投稿したデータの一つ上のchildまで指定することになる ref.child((FIRAuth.auth()?.currentUser?.uid)!).observe(.value, with: {(snapShots) in if snapShots.children.allObjects is [FIRDataSnapshot] { print("snapShots.children...\(snapShots.childrenCount)") //いくつのデータがあるかプリント print("snapShot...\(snapShots)") //読み込んだデータをプリント self.snap = snapShots } self.reload(snap: self.snap) }) } //読み込んだデータは最初すべてのデータが一つにまとまっているので、それらを分割して、配列に入れる func reload(snap: FIRDataSnapshot) { if snap.exists() { print(snap) //FIRDataSnapshotが存在するか確認 contentArray.removeAll() //1つになっているFIRDataSnapshotを分割し、配列に入れる for item in snap.children { contentArray.append(item as! FIRDataSnapshot) } // ローカルのデータベースを更新 ref.child((FIRAuth.auth()?.currentUser?.uid)!).keepSynced(true) //テーブルビューをリロード table.reloadData() } } //timestampで保存されている投稿時間を年月日に表示形式を変換する func getDate(number: TimeInterval) -> String { let date = Date(timeIntervalSince1970: number) let formatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd HH:mm" return formatter.string(from: date) } }

###試したこと
ProductのCleanは行いましたが変わりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
iOS10
Swift3
Xcode8.2.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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