Как разрешить точку или запятую в UITextField в расчете? - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в коде.Я только начал изучать #swift и пытался сделать приложение для расчета.Моя проблема в том, что мой UITextField не работает с точкой или запятой.

import UIKit

class ViewController: UIViewController {



    @IBOutlet weak var ilkLabel: UITextField!
    @IBOutlet weak var ikinciLabel: UITextField!
    @IBOutlet weak var sonucLabel: UILabel!

    @IBOutlet weak var ilk2Label: UITextField!
    @IBOutlet weak var ikinci2Label: UITextField!
    @IBOutlet weak var sonuc2Label: UILabel!

    @IBOutlet weak var ilk3Label: UITextField!
    @IBOutlet weak var ikinci3Label: UITextField!
    @IBOutlet weak var sonuc3Label: UILabel!

    var sonuc:Double = 0
    var sonuc2:Double = 0
    var sonuc3:Double = 0
    var deneme:Double = 0


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

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }



    @IBAction func plusBtn(_ sender: Any) {

        func forTrailingZero(temp: Double) -> String {
            let tempVar = String(format: "%g", temp)
            return tempVar
        }

        deneme = Double(Int(ikinciLabel.text!)! + 100 / 100 * Int(ilkLabel.text!)!)
        sonucLabel.text = String(forTrailingZero(temp:  Double(ikinciLabel.text!)! / 14.56     ) )


    }


    @IBAction func plus2Btn(_ sender: Any) {



    }

    @IBAction func plus3Btn(_ sender: Any) {


    }

}

Я рассчитываю сделать расчет как 1,4 + 2,35, но при попытке приложения происходит сбой.Я могу рассчитать только целое число как 2 + 2.

1 Ответ

0 голосов
/ 06 июля 2019

@ Мэтт прав.Если текст в ikinciLabel не является Int, приложение вылетает.Вы говорите, что он падает, используя оператор принудительного развертывания:!.

В общем

Вы должны разматывать вещи только тогда, когда вы абсолютно уверены, что вещь, которую вы хотите развернуть, не ноль.Во всех других случаях вы должны if-let или guard-let опционального, использовать оператор слияния nil (??) (или другие способы развернуть опциональные значения) и обработать nil-case.

В вашем случае

Если вы хотите, чтобы пользователь мог вводить числа с плавающей запятой, используя запятую или точку, вы можете просто заменить каждую запятую на точкувот так:

let enteredTextWithoutComma = textField.text?.replacingOccurrences(of: ",", with: ".")

Эта новая константа является необязательной.Чтобы безопасно сделать из него Дабл, сделайте:

guard let enteredTextWithoutCommaUnwraped = enteredTextWithoutComma,
      let enteredNumber = Double(enteredTextWithoutCommaUnwraped) else {
   // one of the two actions didn't work. Maybe the entered phrase was not a number
   // do something
   return
}
// here you can use the variable enteredNumber. It is now a Double (not an Optional)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...