前提・実現したいこと
下記ご回答をいただけますと幸いです。
計算機アプリを製作中です。テキストフィールド内に表示される文字列(数字)を3桁区切りにしたいです。
発生している問題・エラーメッセージ
下記コードの@IBAction func tap1Button(_ sender: Any)
にてボタンを押下した際に、
「Unexpectedly found nil while unwrapping an Optional value」のエラーが発生し、
アプリがクラッシュします。
ネットで調べ3桁区切りができるようなコードを入れてみたのですが、テキストフィールドに表示される数字が4桁を超えるとクラッシュします。
1. 数字ボタンをタップ
↓
2. テキストフィールドに数字が表示される
↓
3. 4桁までは問題なく桁区切りされ表示される(1,111)
↓
4. 5桁目を入力しようとすると上記エラーメッセージがでてクラッシュする
※該当箇所のエラースクリーンショットも添付しました
Outlet接続なども全て確認したのですが、特に問題はありませんでした。
func calcResult()
と@IBAction func tap1Button(_ sender: Any)
部分のコードを変えたりしながらprintで確認してみたところ、
・5桁目を入力すると「nil」もしくは「0」になる
・5桁目以降入力はできるが「,」が付かない(1,1111111のように先頭から4桁目のところしか付かない)
となり、原因と対応方法ががわかりません。
基本的なところが理解できていないだと思いますが、どなたかご教示をお願いいたします。
該当のソースコード
ViewController
1import UIKit 2 3class ViewController: UIViewController { 4 5 var resultValue: Int! 6 7 @IBOutlet weak var exchangeValueField: UITextField! 8 @IBOutlet weak var resultValueField: UITextField! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 exchangeValueField.text = "" 13 resultValueField.text = "" 14 15 exchangeValueField.attributedPlaceholder = NSAttributedString(string: "0", attributes: [NSAttributedString.Key.foregroundColor : UIColor.white]) 16 17 resultValueField.attributedPlaceholder = NSAttributedString(string: "0", attributes: [NSAttributedString.Key.foregroundColor : UIColor.black]) 18 } 19 20 func decimalStyle(moneyValue: String) -> String { 21 let formatter = NumberFormatter() 22 formatter.numberStyle = .decimal 23 formatter.groupingSeparator = "," 24 formatter.groupingSize = 3 25 formatter.maximumFractionDigits = 1 26 if let moneyValue = Double(moneyValue) { 27 return formatter.string(from: NSNumber(value: moneyValue)) ?? "(moneyValue)" 28 } 29 return moneyValue 30 } 31 32 func calcResult() { 33 let result = Double(resultValue) * 2.05 34 let formattedValue = decimalStyle(moneyValue: "(result)") 35 resultValueField.text = formattedValue 36 37 } 38 39 @IBAction func tap1Button(_ sender: Any) { 40 let inputValue = exchangeValueField.text! + "1" 41 let formattedInputValue = decimalStyle(moneyValue: "(inputValue)") 42 exchangeValueField.text = formattedInputValue 43 44 resultValue = Int(inputValue) 45 46 calcResult() 47 } 48}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/25 01:10