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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

1447閲覧

割り勘アプリを作成しています

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2018/05/20 02:20

編集2018/05/21 09:33

###テキストに入力された数字が1以下ならアラートを出すようにしたい
割り勘アプリを作成していて、
「人数と数字のテキストが見入力の場合ならアラートを出す。」
ということはできたのですが、

それにプラスして
「テキストに入力された数字が1以下ならアラートを出す。」
ようにしたいのですが、
初学者で独学の為、詰まってしまいました。。

もう一つfuncを追加ですれば良いのだろうかとは
思っているのですが…

[追記]
付随して質問なのですが、
計算結果が割り切れない場合、
100円単位で切り上げられるようにするには、
どこに何を追記したら良いかご教授願いたいです。

発生している問題・エラーメッセージ

特に無し

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var ninzu: UITextField! 6 @IBOutlet weak var kingaku: UITextField! 7 @IBOutlet weak var kekka: UILabel! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 13 self.ninzu.keyboardType = UIKeyboardType.numberPad 14 self.kingaku.keyboardType = UIKeyboardType.numberPad 15 } 16 17 override func viewDidAppear(_ animated: Bool) { 18 let Alert: UIAlertController = UIAlertController(title:"タイトル",message:"メッセージ",preferredStyle: .alert) 19 let CloseAction = UIAlertAction(title: "閉じる", style: .default) { 20 action in 21 print("閉じる") 22 23 } 24 25 Alert.addAction(CloseAction) 26 present(Alert, animated: true, completion: nil) 27 } 28 29 override func didReceiveMemoryWarning() { 30 super.didReceiveMemoryWarning() 31 // Dispose of any resources that can be recreated. 32 } 33 34 35 @IBAction func keisan(_ sender: UIButton) { 36 37 if (kingaku.text ?? "").isEmpty || (ninzu.text ?? "").isEmpty { 38 //UIAlertControllerインスタンスの作成 39 let alertController = UIAlertController(title: "エラー", message: "合計金額又は、人数が未入力です。", preferredStyle: .alert) 40 //追加するアクションの設定 41 let ryoukaiAction = UIAlertAction(title: "了解", style: .default, handler: nil) 42 //設定したアラートアクションをUIAlertControllerに追加する 43 alertController.addAction(ryoukaiAction) 44 //アラートを表示 45 present(alertController, animated: true, completion: nil) 46 47 } else { 48 guard let pricetext = kingaku?.text, let _ = Int(pricetext) else{ 49 return 50 } 51 guard let numbertext = ninzu?.text, let _ = Int(numbertext) else{ 52 return 53 } 54 55 56 let intNinzu = Int(ninzu.text!)! 57 let intKingaku = Int(kingaku.text!)! 58 let intKekka = intKingaku / intNinzu 59 kekka.text = "(intKekka)円" 60 61 62 view.endEditing(true) 63 64 65 } 66 67 68} 69} 70

試したこと

ググってその関数を入れてみたりしたのですが、
上手くいきませんでした。。

補足情報(FW/ツールのバージョンなど)

最新のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var ninzu: UITextField! 6 @IBOutlet weak var kingaku: UITextField! 7 @IBOutlet weak var kekka: UILabel! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 13 self.ninzu.keyboardType = UIKeyboardType.numberPad 14 self.kingaku.keyboardType = UIKeyboardType.numberPad 15 } 16 17 override func didReceiveMemoryWarning() { 18 super.didReceiveMemoryWarning() 19 // Dispose of any resources that can be recreated. 20 } 21 22 23 24 @IBAction func keisan(_ sender: UIButton) { 25 26 guard let kingaku = kingaku.text, let ninzu = ninzu.text else { return } 27 28 if kingaku.isEmpty || ninzu.isEmpty { 29 //UIAlertControllerインスタンスの作成 30 let alertController = UIAlertController(title: "エラー", message: "合計金額又は、人数が未入力です。", preferredStyle: .alert) 31 //追加するアクションの設定 32 let ryoukaiAction = UIAlertAction(title: "了解", style: .default, handler: nil) 33 //設定したアラートアクションをUIAlertControllerに追加する 34 alertController.addAction(ryoukaiAction) 35 //アラートを表示 36 present(alertController, animated: true, completion: nil) 37 38 } else { 39 guard let kingakuInt = Int(kingaku), let ninzuInt = Int(ninzu) else{ 40 // Int型に変更できない文字が入力された場合 41 return 42 } 43 44 guard kingakuInt > 100, ninzuInt > 1 else{ 45 // 金額、人数に0以下が入力された場合 46 47 let alertController = UIAlertController(title: "エラー", message: "数字が無効です", preferredStyle: .alert) 48 //追加するアクションの設定 49 let ryoukaiAction = UIAlertAction(title: "了解", style: .default, handler: nil) 50 //設定したアラートアクションをUIAlertControllerに追加する 51 alertController.addAction(ryoukaiAction) 52 //アラートを表示 53 present(alertController, animated: true, completion: nil) 54 55 return 56 } 57 58 59 let intKekka = kingakuInt / ninzuInt 60 var result = 0 61 if kingakuInt % ninzuInt == 0 { 62 result = intKekka 63 } else { 64 // 100単位で切り上げ 65 result = Int(ceil(Double(intKekka) / 100) * 100) 66 } 67 print("(result)円") 68 } 69 70 } 71 @IBAction func reset(_ sender: UIButton) { 72 ninzu.text = "" 73 kingaku.text = "" 74 75} 76 77} 78

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

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

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

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

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

guest

回答1

0

ベストアンサー

判定は以下の様にすることで分けられると思います。
100単位で切り上げはこのままでは思うように動かないこともあると思うので(割った金額が少ない場合など)、使いやすいように変更してください。

swift

1@IBAction func keisan(_ sender: UIButton) { 2 3 guard let kingaku = kingaku.text, let ninzu = ninzu.text else { return } 4 5 if kingaku.isEmpty || ninzu.isEmpty { 6 7 // 入力文字が空文字の場合 8 } else { 9 10 guard let kingakuInt = Int(kingaku), let ninzuInt = Int(ninzu) else{ 11 // Int型に変更できない文字が入力された場合 12 return 13 } 14 15 guard kingakuInt > 0, ninzuInt > 0 else{ 16 // 金額、人数に0以下が入力された場合 17 return 18 } 19 20 // 金額、人数が0以上の場合 21 let intKekka = kingakuInt / ninzuInt 22 var result = 0 23 if kingakuInt % ninzuInt == 0 { 24 result = intKekka 25 } else { 26 // 100単位で切り上げ 27 result = Int(ceil(Double(intKekka) / 100) * 100) 28 } 29 print("(result)円") 30 } 31}

投稿2018/05/20 02:47

編集2018/05/20 03:28
_Kentarou

総合スコア8490

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

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

退会済みユーザー

退会済みユーザー

2018/05/20 03:03 編集

回答ありがとうございます! 上記の文章を追加するという形で宜しいでしょうか? そのまま入れ替えたらアラート文章は表示されますか?
_Kentarou

2018/05/20 03:12

〜の場合と書いてあるところにやりたい処理を書けばよいと思います。
退会済みユーザー

退会済みユーザー

2018/05/20 14:03

上記の編集後のソースコードを確認して頂きたいのですが、 2つの問題が発生してしまいまいした。 ⑴結果が出なくなってしまった。 以下のエラーが出てしまっています Thread 1: breakpoint 1.1 ⑵数字1以下が入力されてもアラートが表示されない また結果が表示されなくなってしまったので、 切り上げできているかも未確認です。 またこの編集内容は関係ないのですが、 リセットボタンを作成して 数字と人数のところをリセットするような 仕組みを作りたいのですが どうしたら良いでしょうか?
_Kentarou

2018/05/20 14:22 編集

> ⑴結果が出なくなってしまった エラーはどの行で出ているのでしょうか? > ⑵数字1以下が入力されてもアラートが表示されない 「// 金額、人数に0以下が入力された場合」 の部分にアラートが記述されていないので出ないと思います。 リセット @IBAction func reset(_ sender: UIButton) { ninzu.text = "" kingaku.text = "" }
退会済みユーザー

退会済みユーザー

2018/05/20 14:57

> ⑴結果が出なくなってしまった >>エラーはどの行で出ているのでしょうか? 以下の行です print("(result)円") > ⑵数字1以下が入力されてもアラートが表示されない >>「// 金額、人数に0以下が入力された場合」 の部分にアラートが記述されていないので出ないと思います。 確かにそうでした! 以下のコードを入れれば問題ないでしょうか? ```swift let alertController = UIAlertController(title: "エラー", message: "数字が無効です", preferredStyle: .alert) //追加するアクションの設定 let ryoukaiAction = UIAlertAction(title: "了解", style: .default, handler: nil) //設定したアラートアクションをUIAlertControllerに追加する alertController.addAction(ryoukaiAction) //アラートを表示 present(alertController, animated: true, completion: nil) ``` リセット @IBAction func reset(_ sender: UIButton) { ninzu.text = "" kingaku.text = "" } こちらも ninzu.text = "" のとなりに以下のエラーがでております。。 Expected declaration
_Kentarou

2018/05/20 15:35

> ⑴結果が出なくなってしまった このエラーはもしかしてエラーではなくてBreakpointで止まっているだけでは無いですか?
退会済みユーザー

退会済みユーザー

2018/05/20 15:55

Breakpoint とはなんでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/21 02:19 編集

BreakPointはとても簡単に外せました! ありがとうございます!! ただこのくらいはぐぐればよかったと反省です。 あとはリセットボタンの Expected declaration のエラーについてですが、 以下の記事をみると 書く場所が宜しくないということでしょうか? https://qiita.com/hyoutann/items/76513fc40ab5881f84a1
_Kentarou

2018/05/21 03:46 編集

もう一つ新しい質問の方で答えているので、こちらは解決済みにしてください。 両方でやり取りするのも、わたりずらいので。
退会済みユーザー

退会済みユーザー

2018/05/21 04:10 編集

まだシミュレーターで動作確認できていないので、 こちらは一旦保留にします。
退会済みユーザー

退会済みユーザー

2018/05/21 09:28

シミュレーターを起動して リセットボタンまで機能しましたが、 計算結果がやはり出ませんね、、 リセットボタンが機能している最新の状態の ソースコードを載せておきます。
_Kentarou

2018/05/21 12:59 編集

一番大事なラベルに出力するコードが無いですよ。 kekka.text = "(result)円"
退会済みユーザー

退会済みユーザー

2018/05/22 02:21

それはこれが担っているかと勘違いしておりました。 print("(result)円") それではこの上記のコードと入れ替えるのですか? またはこいつはこいつで機能しているなら 他の場所に下記コードを入れるのでしょうか? kekka.text = "(result)円"
退会済みユーザー

退会済みユーザー

2018/05/22 02:34

結果でました! ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問