UITableView Section 復習App

#今回の内容
<img width="150" alt="A1B33213-06A4-4880-8923-75E75BE3E488_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/ca1ed88c-5e3a-4555-b596-e465f24953ca.jpeg">  

#機能説明
* `UISegmentedControl`で指定した番号のSectionに、TextFieldのtextが表示されたCellを追加する。

#コードと簡単解説

##UITableView （Sectionの作成）

* `func numberOfSections(in tableView: UITableView) -> Int {}`内で、表示するSectionの数を設定します。

* `func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {}`内で、表示するSectionのTitleを設定します。

```Swift:TableView
    func numberOfSections(in tableView: UITableView) -> Int {
        
        return sectionContentsArray.count
        
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
        
        return sectionContentsArray[section]
        
    }
```

## UITableView（Cellの作成）

* `func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {}`内で各Sectionで表示するCellの数を設定します。

```Swift:TableView
 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        if (section == 0) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 1) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 2) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 3) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 4) == true{
            
            return cellContentsArray[section].count
            
        }else{
            
            return 0
            
        }   
    }
```

* Cellの作成とCellに表示する内容を設定します。

```Swift:TableView
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        
        for sectionCount in 0...4{
            
            if indexPath.section == sectionCount{
              
                cell.textLabel?.text = cellContentsArray[indexPath.section][indexPath.row]
                 
            }       
        }        
        return cell
    }   
}
```

#全てのコード

* `var cellContentsArray = [[String](),[String](),[String](),[String](),[String]()]`は`[[String()],[String()],[String()],[String()],[String()]]`だと、各配列[0]番目に`""`が入ってしまう。なのでアプリを最初に開いた時に、値の入っていないCellが1つずつ作られてしまいます。

```Swift:デバッグエリア
 [[""], [""], [""], [""], [""]]  //var cellContentsArray = [[String()],[String()],[String()],[String()],[String()]]
```

```Swift:ViewController
import UIKit

class ViewController: UIViewController{
    
    @IBOutlet weak var segments: UISegmentedControl!
    @IBOutlet weak var cellContentsTextField: UITextField!
    @IBOutlet weak var addButton: UIButton!
    @IBOutlet weak var tableView: UITableView!
    
    let sectionContentsArray = ["1","2","3","4","5"]
    
    var cellContentsArray = [[String](),[String](),[String](),[String](),[String]()]    
    var selectSegmentNumber = Int()
    
    override func viewDidLoad() {
        super.viewDidLoad()
     
        createSegments(cellContentsArrayCount: sectionContentsArray.count)
        print(cellContentsArray)
        
        tableView.delegate = self
        tableView.dataSource = self
  
    }    
    
    @IBAction func add(_ sender: UIButton) {
        
        if 0...4 ~= selectSegmentNumber{
        
            for searchCount in 0...selectSegmentNumber{
                
                if searchCount == selectSegmentNumber{
                    
                    cellContentsArray[selectSegmentNumber].append(cellContentsTextField.text!)
                    cellContentsTextField.text = ""
                    print(cellContentsArray[selectSegmentNumber])
                }                
            }
            
            tableView.reloadData()
        }
    }
    
}

extension ViewController:UITableViewDelegate,UITableViewDataSource {
    
    func numberOfSections(in tableView: UITableView) -> Int { //セクション数
        
        return sectionContentsArray.count
        
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { //セクション名
        
        return sectionContentsArray[section]
        
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        if (section == 0) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 1) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 2) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 3) == true{
            
            return cellContentsArray[section].count
            
        }else if (section == 4) == true{
            
            return cellContentsArray[section].count
            
        }else{
            
            return 0
            
        }
        
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        
        for sectionCount in 0...4{
            
            if indexPath.section == sectionCount{
              
                cell.textLabel?.text = cellContentsArray[indexPath.section][indexPath.row]
                 
            }
            
        }
        
        return cell
    }
    
    
}

extension ViewController{
    
    func createSegments(cellContentsArrayCount:Int){
        
        segments.removeAllSegments()
        
        for segmentCount in 0...cellContentsArrayCount - 1{
            
            segments.insertSegment(withTitle: String(segmentCount + 1), at: segmentCount, animated: true)
            segments.addTarget(self, action: #selector(sendSelectSegment), for: .valueChanged)
        }
        
        segments.backgroundColor = .white
        segments.selectedSegmentTintColor = .systemGreen   
    }
    
    @objc func sendSelectSegment(sender:UISegmentedControl){
        
        selectSegmentNumber = sender.selectedSegmentIndex         
    }   
}
```

#終わり
ご指摘、ご質問などありましたら、コメントまでお願い致します。