guard let x = y else { return }使ってみよう（足し算するだけの簡単App)

#今回の内容
<img width="150" alt="A94BDE1A-7239-406C-9D24-7BE1EA3CE249_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/52de83e9-634a-d8ec-855b-2dee388c66eb.jpeg"> <img width="148" alt="F173CBBA-6597-45CE-A238-77A7514D3DDA_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/9e7896c0-ef21-a2c9-15f0-e302b8f98ba8.jpeg">

#コードと簡単解説

# guard let x = y else { return }を使用して関数を作る。

* この関数では、`Int型`の`引数upperTextとunderText`に入ってきた値を、nilで無いなら足し算をして、配列に入れTableViewに表示できるようにします。

* `引数upperTextとunderText`の両方または片方でもnilだった場合、アラートで知らせる様にします。

```Swift:
    func addition(upperText:Int?,underText:Int?){
        
        guard let resultUpperText = upperText else { self.showAlert(); return } //nilならアラートを表示して後続の処理をさせない
        guard let resultUnderText = underText else { self.showAlert(); return } //nilならアラートを表示して後続の処理をさせない
        
        cellLeftLabelContentsArray.append(String(resultUpperText + resultUnderText))
               
        upperTextField.text = ""
        underTextField.text = ""
        
        tableView.reloadData()
    }
```


#全体コード

*  TableViewなどはMain.storyboardで下の画像の様に作っています。

<img width="150" alt="0172159F-9861-4154-BA7D-7CC7B2754567_1_201_a.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466343/412a6180-ef4e-1458-27c3-7a0fbb180da0.jpeg">


```Swift:
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var upperSystemIndigoView: UIView!
    @IBOutlet weak var underSystemIndigoView: UIView!
    @IBOutlet weak var upperTextField: UITextField!
    @IBOutlet weak var underTextField: UITextField!
    @IBOutlet weak var addButton: UIButton!
    @IBOutlet weak var tableView: UITableView!
    
    var cellLeftLabelContentsArray = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        upperSystemIndigoView.layer.cornerRadius = 120.0  //角を丸くする
        upperSystemIndigoView.layer.maskedCorners = [.layerMinXMaxYCorner]  //丸くする角を指定する
        upperSystemIndigoView.layer.shadowOffset = CGSize(width: 3, height: 3) //影をつける
        upperSystemIndigoView.layer.shadowRadius = 10.0 //影のぼかし具合を設定
        upperSystemIndigoView.layer.shadowOpacity = 0.8 //影の透明度を設定
        
        underSystemIndigoView.layer.cornerRadius = 120.0
        underSystemIndigoView.layer.maskedCorners = [.layerMaxXMinYCorner]
        underSystemIndigoView.layer.shadowOffset = CGSize(width: 3, height: 3)
        underSystemIndigoView.layer.shadowRadius = 10.0
        underSystemIndigoView.layer.shadowOpacity = 0.8
        
        upperTextField.layer.borderColor = UIColor.systemIndigo.cgColor 
        upperTextField.layer.borderWidth = 1.0
        upperTextField.borderStyle = .roundedRect
        
        underTextField.layer.borderColor = UIColor.systemIndigo.cgColor
        underTextField.layer.borderWidth = 1.0
        
        addButton.layer.cornerRadius = 10.0
        addButton.layer.shadowOffset = CGSize(width: 1, height: 1)
        addButton.layer.shadowRadius = 10.0
        addButton.layer.shadowOpacity = 0.4
        
        tableView.layer.borderColor = UIColor.systemIndigo.cgColor
        tableView.layer.borderWidth = 1.0
        
        tableView.dataSource = self      
    }
    
    @IBAction func add(_ sender: UIButton) {
        
        addition(upperText: Int(upperTextField.text!), underText: Int(underTextField.text!))     
    }
      
    func addition(upperText:Int?,underText:Int?){
        
        guard let resultUpperText = upperText else { self.showAlert(); return }
        guard let resultUnderText = underText else { self.showAlert(); return }
        
        cellLeftLabelContentsArray.append(String(resultUpperText + resultUnderText))
               
        upperTextField.text = ""
        underTextField.text = ""
        
        tableView.reloadData()
    }
    
    func showAlert(){
        
        let usualAlert = {() -> UIAlertController in
            
            let alert = UIAlertController(title: "nilを見つけたよ", message: "入力されているか確認してね", preferredStyle: .alert)
            
            alert.addAction(UIAlertAction(title: "No", style: .destructive, handler: { _ in
                
                print("No")
            }))
            
            alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { _ in
                
                print("Yes")
            }))
            
            return alert
        }()
        
        self.present(usualAlert, animated: true, completion: nil)
    }
    
}

extension ViewController:UITableViewDataSource{
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return cellLeftLabelContentsArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        
        let cellLeftLabel = cell.contentView.viewWithTag(1) as! UILabel
        
        cellLeftLabel.text = cellLeftLabelContentsArray[indexPath.row]
        
        return cell
    }
        
}
```

# 終わり
* 自分がそうだったのですが、勉強を始めて最初の頃は調べても結局あまり理解出来ないことがありました。

* 理由としては、結局いつ使うの?、どんな使い方をするの?って感じでしたね。

* なので、アプリとは呼べない様な簡単なコードを何度も調べながら書いて、やっと理解出来たかな?って感じでした。(分からないこともあるけど、それも楽しい)

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