Swiftにおける型について、お聞きしたく質問させていただきました。
以下は「ChatViewController.swift」になります。
import UIKit import ChameleonFramework class ChatViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate{ @IBOutlet weak var tableView: UITableView! @IBOutlet weak var messageTextField: UITextField! //スクリーンのサイズ let screenSize = UIScreen.main.bounds.size var chatArray = [Message]() override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self messageTextField.delegate = self tableView.register(UINib(nibName: "CustomCell", bundle:nil),forCellReuseIdentifier:"Cell") //可変 tableView.rowHeight = UITableView.automaticDimension //セルの見積もりの高さ tableView.estimatedRowHeight = 75 //キーボード NotificationCenter.default.addObserver(self, selector: #selector(ChatViewController.keyboardWillShow(_ :)), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(ChatViewController.keyboardWillHide(_ :)), name: UIResponder.keyboardWillHideNotification, object: nil) //firebaseからデータをfetch(取得) } @objc func keyboardWillShow(_ notification:NSNotification){ let keyboardHeight = ((notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as Any) as AnyObject).cgRectValue.height messageTextField.frame.origin.y = screenSize.height - keyboardHeight - messageTextField.frame.height } @objc func keyboardWillHide(_ notification:NSNotification){ messageTextField.frame.origin.y = screenSize.height - messageTextField.frame.height guard let rect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, //キーボードが下がる時間帯をデュレーションとして取る let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else{return} UIView.animate(withDuration:duration){ let transform = CGAffineTransform(translationX: 0, y: 0 ) self.view.transform = transform } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { messageTextField.resignFirstResponder() } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //メッセージの数 chatArray.count } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for:indexPath) as! CustomCell cell.messageLabel.text = chatArray[indexPath.row].message cell.userNameLabel.text = chatArray[indexPath.row].sender cell.iconImageView.image = UIImage(named:"dogAvatarImage") cell.messageLabel.backgroundColor = UIColor.flatGreen() return cell } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ }
以下は、「Message.swift」になります。
import Foundation class Message{ var sender:String = "" var message:String = "" }
お聞きしたい点なのですが、「chatviewController」において、var chatArray = [Message]()
こちらの部分で、型に「Messsage」を指定し、関数cellForRowAt
において、cell.messageLabel.text = chatArray[indexPath.row].message
と、Messageクラスのプロパティを指定しています。
疑問点なのですが、仮に、「文字列」がchatArray
に入ったとしても、型にMessageが指定されていた場合は強制的にキャストされるのでしょうか?
また、型を指定する際に、明示的に、自分の作ったクラスを指定した場合は、そのクラスのプロパティやメソッドを変数は、使用することができるとの解釈であっていますでしょうか?
上記2点につきまして、ご助言頂けましたら幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー