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

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

ただいまの
回答率

90.35%

  • Swift

    7639questions

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

  • iOS

    4165questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 275
退会済みユーザー

退会済みユーザー

テキストに入力された数字が1以下ならアラートを出すようにしたい

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

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

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

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

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

特に無し

 該当のソースコード

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var ninzu: UITextField!
    @IBOutlet weak var kingaku: UITextField!
    @IBOutlet weak var kekka: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    self.ninzu.keyboardType = UIKeyboardType.numberPad
    self.kingaku.keyboardType = UIKeyboardType.numberPad
    }

    override func viewDidAppear(_ animated: Bool) {
        let Alert: UIAlertController = UIAlertController(title:"タイトル",message:"メッセージ",preferredStyle: .alert)
        let CloseAction = UIAlertAction(title: "閉じる", style: .default) {
            action in
            print("閉じる")

        }

        Alert.addAction(CloseAction)
        present(Alert, animated: true, completion: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func keisan(_ sender: UIButton) {

        if (kingaku.text ?? "").isEmpty || (ninzu.text ?? "").isEmpty {
            //UIAlertControllerインスタンスの作成
            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)

        } else {
            guard let pricetext = kingaku?.text, let _ = Int(pricetext) else{
                return
            }
            guard let numbertext = ninzu?.text, let _ = Int(numbertext) else{
                return
            }


    let intNinzu = Int(ninzu.text!)!
    let intKingaku = Int(kingaku.text!)!
    let intKekka = intKingaku / intNinzu
    kekka.text = "\(intKekka)円"


    view.endEditing(true)


    }


}
}

 試したこと

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

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

 最新のソースコード

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var ninzu: UITextField!
    @IBOutlet weak var kingaku: UITextField!
    @IBOutlet weak var kekka: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.ninzu.keyboardType = UIKeyboardType.numberPad
        self.kingaku.keyboardType = UIKeyboardType.numberPad
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    @IBAction func keisan(_ sender: UIButton) {

        guard let kingaku = kingaku.text, let ninzu = ninzu.text else { return }

        if kingaku.isEmpty || ninzu.isEmpty {
            //UIAlertControllerインスタンスの作成
            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)

        } else {
            guard let kingakuInt = Int(kingaku), let ninzuInt = Int(ninzu) else{
                // Int型に変更できない文字が入力された場合
                return
            }

            guard kingakuInt > 100, ninzuInt > 1 else{
                // 金額、人数に0以下が入力された場合

                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)

                return
            }


            let intKekka = kingakuInt / ninzuInt
            var result = 0
            if kingakuInt % ninzuInt == 0 {
                result = intKekka
            } else {
                // 100単位で切り上げ
                result = Int(ceil(Double(intKekka) / 100) * 100)
            }
            print("\(result)円")
        }

    }
    @IBAction func reset(_ sender: UIButton) {
        ninzu.text = ""
        kingaku.text = ""

}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

@IBAction func keisan(_ sender: UIButton) {

    guard let kingaku = kingaku.text, let ninzu = ninzu.text else { return }

    if kingaku.isEmpty || ninzu.isEmpty {

        // 入力文字が空文字の場合
    } else {

        guard let kingakuInt = Int(kingaku), let ninzuInt = Int(ninzu) else{
            // Int型に変更できない文字が入力された場合
            return
        }

        guard kingakuInt > 0, ninzuInt > 0 else{
            // 金額、人数に0以下が入力された場合
            return
        }

        // 金額、人数が0以上の場合
        let intKekka = kingakuInt / ninzuInt
        var result = 0
        if kingakuInt % ninzuInt == 0 {
            result = intKekka
        } else {
            // 100単位で切り上げ
            result = Int(ceil(Double(intKekka) / 100) * 100)
        }
        print("\(result)円")
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/20 12:03 編集

    回答ありがとうございます!

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

    キャンセル

  • 2018/05/20 12:12

    〜の場合と書いてあるところにやりたい処理を書けばよいと思います。

    キャンセル

  • 2018/05/20 23:03

    上記の編集後のソースコードを確認して頂きたいのですが、
    2つの問題が発生してしまいまいした。
    ⑴結果が出なくなってしまった。
    以下のエラーが出てしまっています
    Thread 1: breakpoint 1.1

    ⑵数字1以下が入力されてもアラートが表示されない
    また結果が表示されなくなってしまったので、
    切り上げできているかも未確認です。

    またこの編集内容は関係ないのですが、
    リセットボタンを作成して
    数字と人数のところをリセットするような
    仕組みを作りたいのですが
    どうしたら良いでしょうか?

    キャンセル

  • 2018/05/20 23:20 編集

    > ⑴結果が出なくなってしまった

    エラーはどの行で出ているのでしょうか?


    > ⑵数字1以下が入力されてもアラートが表示されない

    「// 金額、人数に0以下が入力された場合」 の部分にアラートが記述されていないので出ないと思います。

    リセット
    @IBAction func reset(_ sender: UIButton) {
    ninzu.text = ""
    kingaku.text = ""
    }

    キャンセル

  • 2018/05/20 23: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

    キャンセル

  • 2018/05/21 00:35

    > ⑴結果が出なくなってしまった

    このエラーはもしかしてエラーではなくてBreakpointで止まっているだけでは無いですか?

    キャンセル

  • 2018/05/21 00:55

    Breakpoint とはなんでしょうか?

    キャンセル

  • 2018/05/21 06:49

    https://teratail.com/questions/42456
    BreakPointの外し方です。

    キャンセル

  • 2018/05/21 10:31 編集

    BreakPointはとても簡単に外せました!
    ありがとうございます!!
    ただこのくらいはぐぐればよかったと反省です。

    あとはリセットボタンの
    Expected declaration
    のエラーについてですが、
    以下の記事をみると
    書く場所が宜しくないということでしょうか?
    https://qiita.com/hyoutann/items/76513fc40ab5881f84a1

    キャンセル

  • 2018/05/21 12:46 編集

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

    キャンセル

  • 2018/05/21 13:09 編集

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

    キャンセル

  • 2018/05/21 13:14

    了解です。

    キャンセル

  • 2018/05/21 18:28

    シミュレーターを起動して
    リセットボタンまで機能しましたが、
    計算結果がやはり出ませんね、、

    リセットボタンが機能している最新の状態の
    ソースコードを載せておきます。

    キャンセル

  • 2018/05/21 21:59 編集

    一番大事なラベルに出力するコードが無いですよ。

    kekka.text = "\(result)円"

    キャンセル

  • 2018/05/22 11:21

    それはこれが担っているかと勘違いしておりました。
    print("\(result)円")

    それではこの上記のコードと入れ替えるのですか?
    またはこいつはこいつで機能しているなら
    他の場所に下記コードを入れるのでしょうか?

    kekka.text = "\(result)円"

    キャンセル

  • 2018/05/22 11:34

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Swift

    7639questions

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

  • iOS

    4165questions

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