ばろぐ・ほいダウン

2010年Nゲージにより鉄道事業を開始。2011年Gゲージに参入することで事業拡大。常に夢と目標と野望を持ち活動していく。

Forced cast from 'Double?' to 'Double' only unwraps optionals; did you mean to use '!'? を消したい

今年の1月からSwiftを勉強し始め、日々大苦戦中です。 ぶつかった問題やその解決方法なんかをちょっとずつ書いていけば自分の備忘録がわりになるし、誰かの役にも経つかなと考えたのでこれから気が向いたらプログラミング関係の記事も書いてみます。

f:id:yotubarail:20190412140122p:plain

2つのUITextFieldに入力された数字を掛け算した結果をUIButtonが押された時にUILabelに表示しようとし、このようにコードを書き進めていました。

import UIKit

class ViewController: UIViewController {
    
    
    @IBOutlet weak var text1: UITextField!
    @IBOutlet weak var text2: UITextField!
    @IBOutlet weak var result1: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    

   @IBAction func calculation(_ sender: Any) {

// 小数を扱えるようにUITextFieldをDouble型に変換
        let x1: Double = Double(text1.text!) as! Double 
        let x2: Double = Double(text2.text!) as! Double
        
        let y = x1 * x2
        
        
        result1.text = String(y)
    }


}

すると 

        let x1: Double = Double(text1.text!) as! Double 
        let x2: Double = Double(text2.text!) as! Double

ここでForced cast from 'Double?' to 'Double' only unwraps optionals; did you mean to use '!'? と出てしまいました。

解決しなくてもビルドはできるのですが、なんとかしたいなということで色々試して下記のようにすることで消すことができました。

       let x1 = Double(text1.text!)
        let x2 = Double(text2.text!)
        
        let y = x1! * x2!

短くなってスッキリしましたね。

このままではUITextFieldが空いている時にボタンを押すとアプリが落ちてしまう問題がありますが、とりあえず今回はここまで。