extensionとは?
わかりやすくいうと拡張という意味
こちらの記事がわかりやすいのでリンクを貼っておきます。
https://www.sejuku.net/blog/33334
以前アプリを作るときに参考にしていたソースコードで、
ViewController: UIViewController {}
に、UITableViewDelegate、UITableViewDataSourceを追加して、
ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {}
としていたのですが、後からコードを追加していくとグチャグチャになってしまったことがありました。
その、反省を踏まえてプログラミングスクールで学んだ書き方ではextensionを使ってclassの外に追加したいプログラムを書いていくと、コードがすっきりしてみやすくなりました。
TableViewCellに画像を入れる記事で参考になった記事のリンクも貼っておきます。
https://qiita.com/kapiemon/items/f8a919343a1def729275
ということでこんな感じにコードを修正してみました。
//
// ViewController.swift
// IconImageSample
//
// Created by 橋本純一 on 2022/01/15.
//
import UIKit
class ViewController: UIViewController {
// 名前を入れる配列
let placeArray = [
"寝室", "収納BOX", "車の中", "冷凍庫", "リビング",
"冷蔵庫", "シューズBOX", "収納スペース", "トイレ", "倉庫・ガレージ"
]
// 画像を入れる配列 .jpgだとか.pngといった拡張子は省略してもよいみたい
let imageArray = [
"bead", "box", "car", "freezer", "living",
"refrigerator", "shoes", "storage", "toilet", "warehouse"
]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
extension ViewController: UITableViewDelegate {
// セルの個数を指定する
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return placeArray.count
}
}
extension ViewController: UITableViewDataSource {
// セルに値を設定する
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// セルに表示する値を設定
// テキストラベル
cell.textLabel?.text = placeArray[indexPath.row]
// 画像を複数入れる
cell.imageView?.image = UIImage(named: imageArray[indexPath.row])
return cell
}
}
別ファイルにclass構文でまとめた方が良いのですがうまくいかなかった...
Assets.xcassetsに画像を配置
サンプルアプリをbuildするとこんな感じになりました。
最後に
初心者なもので、まだまだ人の真似をしたり手探りでソースコードを書いて動かしてみるぐらいしかできません。
技術を高めようと日々アウトプットしております。