Ich habe ein GPA-Rechner-Projekt Ich bin nah an der Perfektionierung. Ich muss verhindern, dass der Benutzer eine Nicht-Gleitkommazahl eingibt, obwohl "." die einzigen zulässigen Zeichen sind. Zum Beispiel, wenn ein Benutzer 2.3 eingibt. Aus irgendeinem Grund stürzt mein Programm ab, da diese "Eingabe" kein Float ist. Ich habe die Basis meines Codes unten eingefügt.Vermeiden Sie Absturz während der doppelten Periode während des zurückhaltenden CharacterSet
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var allowed = CharacterSet.decimalDigits
let period = CharacterSet.init(charactersIn: ".")
allowed.formUnion(period)
//UNCOMMENT when isSuperset is working
//let characterSet = CharacterSet(charactersIn: string)
//return allowed.isSuperset(of: characterSet)
// Swift 3 appropriate solution
let isSuperset = string.rangeOfCharacter(from: allowed.inverted) == nil
return isSuperset
}
@IBAction func Calculate(_ sender: AnyObject) {
// if not filled in
if Credits1TF.text == "" || Grade1TF.text == "" || CumCredits.text == "" || CumGPA.text == "" || Credits1TF.text == "." || Grade1TF.text == "." || CumCredits.text == "." || CumGPA.text == "."
{
print...
} else
{
//credits
let credit1 = Float(Credits1TF.text!)!
//grades
let grade1 = Float(Grade1TF.text!)!
//math
let firstgrade = credit1 * grade1
Wie würde ich nur gehen über eine Dezimalstelle in einem Textfeld der Akzeptanz der Zugabe meisten praktisch, da es auf die Textfeld-Funktion bezieht? Oder gibt es einen einfacheren/geradlinigeren Weg?
Update 1:
let credit1 = Float(Credits1TF.text!)!
if credit1 != nil
{
let newcredits1 = credit1
//grades
let grade1 = Float(Grade1TF.text!)!
if grade1 != nil
{ let newgrade1 = grade1
Wenn ich darüber nicht richtig werde ich die Warnung erhalte, dass „den Vergleich nicht optionale Wert vom Typ‚Float‘auf Null immer true zurückgibt“. Ich hatte den Eindruck, dass, wenn Credits1 oder Note1! = Null sind, mein numerischer Wert in Ordnung ist und später keinen Absturz verursachen wird.
Wenn Sie Abstürze vermeiden möchten, hören Sie auf '!' Zu verwenden. – rmaddy
Wäre es besser, ein zu verwenden? –
Nein, es wäre besser, eine optionale Bindung anstelle einer erzwungenen Entpackung zu verwenden. – rmaddy