質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1784閲覧

swiftの条件分岐について

tontoon

総合スコア12

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/01/24 05:33

編集2017/01/24 05:51

ご覧いただきましてありがとうございます。私は今割り勘アプリを作っています。割り勘のボタンを押した際の挙動について解決できずに困っています。

「金額」と「人数」を入力できるテキストフィールドを二つ作り、どちらかが未入力の場合はアラート1を、人数が1人の場合はアラート2を、適切に入力されている場合は割り勘の処理ができるようにしたいです。

しかしうまく条件分岐がかけず、アプリが落ちてしまいます。

swift

1 @IBOutlet weak var moneyForm: UITextField! 2 @IBOutlet weak var humanForm: UITextField! 3 @IBOutlet weak var result: UILabel! 4 5 6//ボタンタップ時の動作を行う関数 7 @IBAction func resultButtom(_ sender: UIButton) { 8 let x1 = Int(moneyForm.text!) 9 let x2 = Int(humanForm.text!) 10 let y = x1! / x2! 11 12 if x1 == nil{ 13 showAlert1() 14 } else if x2 == nil{ 15 showAlert1() 16 } else if x2! <= 1{ 17 showAlert2() 18 } else{ 19 result.text = String(y) 20 } 21 } 22

上記が自分で書いた条件分岐文です。x1とx2はtextFieldに入力した文字をStringからIntに変換しています。どのような記述が適切なのか、何かしらご教示いただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下の様にすると安全に計算できる数値を取得することができます。

swift

1//ボタンタップ時の動作を行う関数 2@IBAction func resultButtom(_ sender: UIButton) { 3 4 var y: Float = 0 5 6 guard let value1 = moneyForm.text, // moneyForm.textがnilでない 7 !value1.isEmpty, // value1が空文字ではない 8 let x1 = Int(value1), // value1がIntに変換できる文字列である 9 let value2 = humanForm.text, // humanForm.textがnilでない 10 !value2.isEmpty, // value2が空文字ではない 11 let x2 = Int(value2) else { // value2がIntに変換できる文字列である 12 13 showAlert1() // Alert1 14 return 15 } 16 17 if x2 > 1 { // x2が1より大きい 18 y = Float(x1 / x2) // 割り勘の計算 19 } else { 20 showAlert2() // Alert2 21 } 22 print(y) 23}

投稿2017/01/24 17:15

編集2017/01/24 17:20
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tontoon

2017/01/25 13:21

動かせました!guard文の書き方大変参考になりました。コード精読し、自分のものにできるよう頑張ります。貴重なお時間割いていただきありがとうございました。
guest

0

swift

1let x1 = Int(moneyForm.text!) 2let x2 = Int(humanForm.text!)

.textがnilのときに落ちます。

nilチェックを行うか、カラ文字列で初期化(.text = "")して下さい。

Nil-Coalescing Operator

nilチェックした方が早そうなので。

swift

1moneyForm.text ?? ""

.textをアンラップしますが、nilの場合は""(カラ文字列)を返します。
これを使って、

swift

1let x1 = Int(moneyForm.text ?? "") 2let x2 = Int(humanForm.text ?? "")

こう書けます。

参考URL: Nil-Coalescing Operator / The Swift Programming Language

投稿2017/01/24 05:57

編集2017/01/24 07:27
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tontoon

2017/01/24 07:04

ご回答ありがとうございます。後者のカラ文字列で初期化する方法にしたいのですが、具体的にどの部分に記述すればよろしいでしょうか。適切な位置に記述できずクラッシュが続いてしまっています。
tontoon

2017/01/25 13:24

nilチェックの書き方をご教示くださりありがとうございます。URLもありがとうございました、参考になりました。自身のif文の書き方がなっておらず、解決できなかったので、努力を重ねていきたいと思います。貴重なお時間割いてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問