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