【Swift】 TableViewCell に画像を入れる【初心者】

#はじめに
TableViewCellに画像を入れる方法について調べたので、メモとしてまとめる事にしました。

#storyboardにTableViewとTableViewCellを準備
![TableView.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/ef4e7c4b-1df6-a1ff-4076-d61f1c7fc39d.png)

#cellにIdentifierを付ける
今回はIdentifierは「cell」にしました。
![cell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/ece54239-77d9-f000-395f-2172559836e1.png)


#Assets.xcassetsに画像ファイルを入れる

![animal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/92015834-e3c6-8671-db34-b1212805daec.png)


#TableViewをdatasouceとdelegateに繋ぐ

![スクリーンショット 2020-11-23 13.17.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/8f1d94fb-91f9-49e5-ff8a-8d59db32c9ce.png)


#UITableViewDelegate,UITableViewDatasourceを追加

```ViewController.swift
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
```

#配列を準備

```ViewController.swift
 let animalArray = ["虎", "猫","犬"]
    //画像用
 let imageArray = ["lion", "cat", "dog"]
```

#セルの設定

```ViewController.swift
 //セルの個数を指定する
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return animalArray.count
        
    }
    
    //セルに値を設定する
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        //セルを取得
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        
        //セルに表示する値を設定
        //テキストラベル
        cell.textLabel?.text = animalArray[indexPath.row]
        return cell
    }
```

![スクリーンショット 2020-11-23 14.38.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/17cad277-62c8-9153-022c-e0b48504a6af.png)


#①１つの画像を全てのcellに入れる

```ViewController.swift
 //①画像(１つの画像を全てのcellに入れる)
        cell.imageView?.image = UIImage(named: "lion")
```

![スクリーンショット 2020-11-23 14.37.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/610e84e0-d4c5-7d49-5788-71059801e836.png)


#②cellの１つずつに別の画像を入れる

```ViewController.swift
 //②画像を複数入れる
        cell.imageView?.image = UIImage(named: imageArray[indexPath.row])
```

![スクリーンショット 2020-11-23 14.37.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/b2db3c5f-1401-a5bb-7011-849c6878367e.png)




#③cellの１つずつに別の画像を入れる（同じサイズにリサイズ）
CGSizeのwidth:50,height:50を変更する事で画像サイズを変更できます。

```ViewController.swift
//③画像を同じサイズにリサイズ
        cell.imageView?.image = UIImage(named: imageArray[indexPath.row])?.resize(size: CGSize(width: 50, height: 50))
```

![スクリーンショット 2020-11-23 14.36.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/15eee84b-2f39-1867-80da-980c6c82ffe9.png)


#リサイズメソッド

```ViewController.swift
extension UIImage {

    func resize(size: CGSize) -> UIImage {
        let widthRatio = size.width / self.size.width
        let heightRatio = size.height / self.size.height
        let ratio = (widthRatio < heightRatio) ? widthRatio : heightRatio
        let resizedSize = CGSize(width: (self.size.width * ratio), height: (self.size.height * ratio))
        // 画質を落とさないように以下を修正
        UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0)
        draw(in: CGRect(x: 0, y: 0, width: resizedSize.width, height: resizedSize.height))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return resizedImage!
    }
}
```

#全てのコード
①②のコードはコメントアウトしてあります。

```ViewController.swift
import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    let animalArray = ["虎", "猫","犬"]
    //画像用
    let imageArray = ["lion", "cat", "dog"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    //セルの個数を指定する
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return animalArray.count
        
    }
    
    //セルに値を設定する
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        //セルを取得
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        
        //セルに表示する値を設定
        //テキストラベル
        cell.textLabel?.text = animalArray[indexPath.row]
        //①画像(１つの画像を全てのcellに入れる)
//        cell.imageView?.image = UIImage(named: "lion")
        
        //②画像を複数入れる
//        cell.imageView?.image = UIImage(named: imageArray[indexPath.row])
        
        //③画像を同じサイズにリサイズ
        cell.imageView?.image = UIImage(named: imageArray[indexPath.row])?.resize(size: CGSize(width: 50, height: 50))
        
        return cell
    }
}

//リサイズメソッド
extension UIImage {

    func resize(size: CGSize) -> UIImage {
        let widthRatio = size.width / self.size.width
        let heightRatio = size.height / self.size.height
        let ratio = (widthRatio < heightRatio) ? widthRatio : heightRatio
        let resizedSize = CGSize(width: (self.size.width * ratio), height: (self.size.height * ratio))
        // 画質を落とさないように以下を修正
        UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0)
        draw(in: CGRect(x: 0, y: 0, width: resizedSize.width, height: resizedSize.height))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return resizedImage!
    }
}
```

#終わりに
初学者のため、もし間違いがあれば教えていただければ幸いです。

#参考サイト
https://qiita.com/ryokosuge/items/d997389529faffab33ba