新Swiftで行こう…第57回「ハイアンドローゲーム6解説」 田部井保

目次 通常版

 ハイアンドローゲーム6の解説です。

 まず前半部分です。

    ///ボタン押下時処理
    @IBAction func TouchBtnGo(_ sender: Any) {
        //回数加算
        cnt = cnt + 1
        //回数表示
        Count.text = cnt.description + "回目"
        //入力フィールドに入れた値を数値としてval変数に入れる
        let val = Int(Input.text!)
        //入力欄が空白、あるいは数値以外
        if val == nil {
            Guide.text = "数値を入れて下さい"
        }
        //入力値と乱数を比べて入力値が大きい場合
        else if val! > randInt {
            Guide.text = "もっと小さいです"
        }
        //入力値と乱数を比べて入力値が小さい場合
        else if val! < randInt {
            Guide.text = "もっと大きいです"
        }
        //上記以外、等しい時
        else {
            Guide.text = "当たりです"
            //OKボタンの表示と押下時処理記述
            //押下時reset関数を呼ぶ
            let okAction = UIAlertAction(title: "OK", style: .default)
            { (action) in
                self.reset()
            }
            //アラートコントローラー定義
            //タイトル、メッセージをまとめた
            //スタイルはアラート
            let alert = UIAlertController(title: "当たり", message: "当たりです", preferredStyle: .alert)
            //アラートアクション
            alert.addAction(okAction)
            //アラートを出す
            present(alert, animated: true, completion: nil)
        }
    }

 8行目の Input.text! ですが、Input.text だとString?型となります。String型は文字列型、String?型は文字列と空白を表すnilが入る事の出来る型となります。String?型のものに ! を付けると無理やりString型にする事が出来ます。Int( )の括弧の中はこの場合はString型である必要があります。試しに ! を取るとエラーになってしまいます。

Int(Input.text!) ですが、これはInt?型となります。整数とnilを取る事が出来ます。ここを以前は Int(Input.text!)! と最後にも ! を付けて無理やりInt型にしていたのですが、これをするとテキストフィールドに何も入れなかった時、アルファベット等数値以外を入れた時に実行時エラーとなってしまいます。実行時エラーを避けるため、最後の ! は取りました。

 そして、まず val と nil を比べて nil だったら数値を入れるように促します。テキストフィールドに何も入れない、あるいはアルファベット等数値以外を入れた場合、val には nil が入ります。

 ここで else となった場合、val には数値が入っている事が保証されるので、val に ! を付けてInt?型をInt型にして比較しています。それが14行目、18行目です。

 続いて後半部分です。

    ///ボタン押下時処理
    @IBAction func TouchBtnGo(_ sender: Any) {
        //入力フィールドに入れた値を数値としてval変数に入れる
        let val = Int(Input.text!)
        //入力欄が空白、あるいは数値以外
        if val == nil {
            Guide.text = "数値を入れて下さい"
        }
        else {
            //回数加算
            cnt = cnt + 1
            //回数表示
            Count.text = cnt.description + "回目"
            //入力値と乱数を比べて入力値が大きい場合
            if val! > randInt {
                Guide.text = "もっと小さいです"
            }
            //入力値と乱数を比べて入力値が小さい場合
            else if val! < randInt {
                Guide.text = "もっと大きいです"
            }
            //上記以外、等しい時
            else {
                Guide.text = "当たりです"
                //OKボタンの表示と押下時処理記述
                //押下時reset関数を呼ぶ
                let okAction = UIAlertAction(title: "OK", style: .default)
                { (action) in
                    self.reset()
                }
                //アラートコントローラー定義
                //タイトル、メッセージをまとめた
                //スタイルはアラート
                let alert = UIAlertController(title: "当たり", message: "当たりです", preferredStyle: .alert)
                //アラートアクション
                alert.addAction(okAction)
                //アラートを出す
                present(alert, animated: true, completion: nil)
            }
        }
    }

 回数加算と回数表示を、この関数の最初でやっていましたが、まず入力値を数値に変換してみて、数値にできなかった時は「数値を入れて下さい」と表示し、それ以外なら、回数加算と回数表示を行い、乱数と入力値を比べて、それによって、「もっと大きいです」、「もっと小さいです」や当たりの時の表示と初期化を行なっています。

目次 通常版

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA