前提・実現したいこと
TextLabelの入力項目にIntを入れると正常動作するのですが、空欄や文字列を入力するとエラーによりクラッシュします。
Segueにて別のViewControllerに値を渡す前にエラー処理をしたいです。
質問内容として;
①エラー処理における考え方をご教授頂けましたら幸いです。
②コードの実装方法の方向性につきまして、ご教授頂けましたら幸いです。
※現在行っている事
simulationStartTappedがボタンとなり、ボタンを押す際に
入力項目にInt以外が入ると何もしない処理にしておりますが、
個人的にあまりしっくりこず、ベストプラクティスをご教授頂けましたら幸いです。
該当のソースコード
Swift5
1import UIKit 2 3class AutoInputDataViewController: UIViewController { 4 5 //入力項目のLabel群 6 @IBOutlet weak var atariiKakuritsuLabel: UITextField! 7 @IBOutlet weak var kakuhenTotsunyuRitsuLabel: UITextField! 8 @IBOutlet weak var kakuhenKeizokuRitsuLabel: UITextField! 9 @IBOutlet weak var soukaitensuLabel: UITextField! 10 @IBOutlet weak var senenKaitensuLabel: UITextField! 11 @IBOutlet weak var atariDedamaLabel: UITextField! 12 @IBOutlet weak var simulationDayLabel: UITextField! 13 14 //エラーが出た時に出るLabel 15 @IBOutlet weak var autoInputErrorLabel: UILabel! 16 17 //ViewDidLoad 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 } 21 22 //PrepareでResultAutoViewControllerに渡す 23 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 24 if (segue.identifier == "goToAutoResult") { 25 //大当たり確率 26 let atariKakuritsuNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 27 atariKakuritsuNyuryoku.atariKakuritsu = Int(atariiKakuritsuLabel.text!)! 28 //確変突入率 29 let kakuhenTotsunyuritsuNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 30 kakuhenTotsunyuritsuNyuryoku.kakuhenTotsunyuritsu = Int(kakuhenTotsunyuRitsuLabel.text!)! 31 //確変継続率 32 let kakuhenKeizokuritsuNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 33 kakuhenKeizokuritsuNyuryoku.kakuhenKeizokuritsu = Int(kakuhenKeizokuRitsuLabel.text!)! 34 //総回転数 35 let kaitensuuSumNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 36 kaitensuuSumNyuryoku.kaitensuuSum = Int(soukaitensuLabel.text!)! 37 //1000円辺りの回転数 38 let senenKaitensuuNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 39 senenKaitensuuNyuryoku.senenKaitensuu = Int(senenKaitensuLabel.text!)! 40 41 //大当たり一回辺りの出玉数 42 let atariDedamaNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 43 atariDedamaNyuryoku.ikaiOatariDedama = Int(atariDedamaLabel.text!)! 44 //日数 45 let simulationDayNyuryoku: ResultAutoViewController = (segue.destination as! ResultAutoViewController) 46 simulationDayNyuryoku.simulationDay = Int(simulationDayLabel.text!)! 47 48 } 49 } 50 51 52 //autoInputErrorLabel.text = "各項目の数値を半角で入力してください" 53 54 @IBAction func simulationStartTapped(_ sender: Any) { 55 if atariiKakuritsuLabel.text! && 56 kakuhenTotsunyuRitsuLabel.text && 57 kakuhenKeizokuRitsuLabel.text && 58 soukaitensuLabel.text && 59 senenKaitensuLabel.text && 60 atariDedamaLabel.text && 61 simulationDayLabel.text == Int(1...9999){ 62 performSegue(withIdentifier: "goToAutoResult", sender: nil) 63 }else{ 64 } 65 } 66 67}
試したこと
try, catchをやろうとしたが、そもそもどのようにすれば良いか分からず。。。
補足情報(FW/ツールのバージョンなど)
Xcode11
Swift5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/11 04:06