Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Die Klasse NSNumberFormatter

Die Ausgabe der Rechenergebnisse sollte ebenfalls formatiert geschehen, da sie viele Nachkommastellen aufweisen kann. Es gibt verschiedene Möglichkeiten, dies umzusetzen. Am einfachsten ist, die Zahlen so zu formatieren, dass weniger Kommastellen angezeigt werden. Änderen Sie die zwei Anweisungen in der calculateButtonClicked-Methode von
    self.outputDegree.doubleValue = resultDegrees
    self.outputRadiants.doubleValue = resultRadiants
zu
    self.outputDegree.stringValue = String(format: "%.3f", resultDegrees)
    self.outputRadiants.stringValue = String(format: "%.3f", resultRadiants)
stacks_image_1ACFDB41-2242-41D7-B3C3-3E09D488253A
Das funktioniert schon gut, doch leider werden bei den Zahlen Punkte und keine Komata als Dezimaltrennzeichen verwendet. Zwar wäre es jetzt ein Leichtes, vor der Ausgabe sämtlich Punkte zu ersetzten, doch eine akzeptable Lösung ist das nicht. Mit solch einer Anpassung hätten wir mit unserem Programm ein ganz ähnliches Problem in englischsprachigen Ländern, wo ein Punkt als Trennzeichen verwendet wird. Die beste Lösung ist es deshalb, den Wert entsprechend den aktuellen Betriebssystemeinstellungen für Sprache und Region zu formatieren. Das ist eine Aufgabe für die Klasse NSNumberFormatter.
NSNumberFormatter ist eine von NSFormatter abgeleitete Klasse und spezialisiert darin, Zahlen zu formatieren. Zwar finden wir NSNumberFormatter auch als Element in der Object Library, von wo aus es direkt auf ein Eingabefeld gezogen werden kann, doch dieses Objekt ist umständlich zu konfigurieren und zudem nicht fehlerfrei. Besser ist es, die NSNumberFormatter-Instanz im Programmcode zu erzeugen und dort zu konfigurieren. Der geeignete Ort, das zu tun, ist die applicationDidFinishLaunching-Methode in der Klasse AppDelegate. Die aktuellen Region-Einstellung können wird über NSLocale.currentLocale() ermitteln.
func applicationDidFinishLaunching(aNotification: NSNotification)
{
    var formatter = InputFormatter()
    self.inputDegree.formatter = formatter
    self.inputMinutes.formatter = formatter
    self.inputSeconds.formatter = formatter

    var numberFormatter = NSNumberFormatter()
    numberFormatter.formatterBehavior = NSNumberFormatterBehavior.Behavior10_4
    numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
    numberFormatter.maximumFractionDigits = 3
    numberFormatter.minimumFractionDigits = 3
    numberFormatter.locale = NSLocale.currentLocale()
    self.outputDegree.formatter = numberFormatter
    self.outputRadiants.formatter = numberFormatter
}
stacks_image_51F96771-2926-437F-BFA5-55E74FF0B780