Gelöst
von Border am 13.11.17 um 10:23
Antwort auf: Sind Swift Entwickler anwesend? von Border

Puuuh... was 'ne Geburt!

Ich hatte bisher absolut keinen Plan vom NumberFormatter. Der ermöglicht es aber, beispielsweise UITextFields mittels Übernahme des String-Wertes beispielsweise in einen Double zu verwandeln. Dem NumberFormatter sagt man dazu nur, dass der Separator ein Komma sein soll und fügt optional noch hinzu, wie viele Nachkommastellen mindestens und maximal ausgegeben werden sollen.
Anschließend kann man mit den so erzeugten Doubles ganz normal rechnen und das Ergebnis z.B. als String, den man ebenfalls an den NumberFormatter bindet, ausgeben. So stürzt die App nicht ab, wenn man mit der deutschen Tastatur Kommazahlen eingibt und am Ende gibt es als Ausgabe ebenfalls eine Kommazahl.

Bis ich das raus hatte, hat's eine Weile gedauert (4 Tage mit abends jeweils 2-3 Stunden).
Für erfahrene Entwickler sicherlich eine Grundfunktion, die im Schlaf geschrieben wird, aber für mich war's Neuland. Meine Berechnungen sind jetzt jedenfalls rechnerisch alle korrekt und von der Darstellung genau so, wie ich es mir vorgestellt hatte.

Ich gehe jetzt wieder in den Kampf mit den elenden Contrains und baue ein paar ordentliche Views. Und dann habe ich tatsächlich meine erste eigene und komplett selbstgeschriebene App fertiggestellt.

Trotz dauerndem Frust, weil man so viele Dinge noch nicht kennt, macht's verdammt viel Spaß. Ideen habe ich bis zur Tür raus.... nur die Fähigkeiten noch nicht :D

Der Vollständigkeit halber hier noch der Code zur Umwandlung eines UITextFields mit Komma-Separator in einen rechenfähigen Double:

#########################################

let formatter = NumberFormatter()
 formatter.numberStyle = .decimal
 formatter.alwaysShowsDecimalSeparator = true
 formatter.locale = Locale(identifier: "de_DE")
 formatter.decimalSeparator = ","
 formatter.maximumFractionDigits = 2
 formatter.minimumFractionDigits = 2
       
let rechenVariable = formatter.number(from: NameDesUITextFields.text!) as! Double

#########################################

< antworten >