2016-04-26 17 views
0

Hallo Ich habe viele Felder in einem OSX-App-Einstellungen, die ich eine Zeichenfolge abrufen möchten, überprüfen Sie, ob es eine gültige Nummer ist, und wenn ja, verwenden es. wie folgt aus:Swift - Nummer aus der Textfeld-String-Überprüfung in einer einzigen Codezeile

if let tS = NSNumberFormatter().numberFromString(sizeTextfield.stringValue) { 
    pref.thumbnailSize = Float(tS) 
} 

würde ich gerne diese wie in einer Zeile in der Lage sein zu tun:

pref.thumbnailSize = (let tS = NSNumberFormatter().numberFromString(sizeTextfield.stringValue) != nil) ? Float(tS) : self.pref.thumbnailSize 

aber XCode mag es nicht.

Ich suche gerade nach unten die Ausführlichkeit schneiden durch einen Vermittler wiederverwenden zu können ...

ich tun konnte:

pref.thumbnailSize = NSNumberFormatter().numberFromString(self.thumbnailSizeTextfield.stringValue) != nil ? Float(NSNumberFormatter().numberFromString(self.thumbnailSizeTextfield.stringValue)) : pref.thumbnailSize 

aber macht den NSNumberFormatter Anruf zweimal anstatt den Wert Cachen nach dem ersten Anruf ...

Ich habe das Gefühl, dass es eine Art syntaktischen Zucker Abkürzung (mit dem Operator ?? in Verbindung), die hier verwendet werden kann, um dies weiter komprimieren kann, aber ich kann nicht daran denken . Irgendwelche Ideen?

+1

BTW, brauchen Sie keine Nummer Formatierer für diese Anwendung: Sie nur verwenden können, 'Float (Yourstring)' –

+0

@AaronBrager guter Punkt , aber würde Float() immer noch nil zurückgeben, wenn die Zeichenkette nicht übersetzt wird, oder würde sie einen Standardwert wie 0.0 zurückliefern? –

+0

Es ist ein "fehlender Initializer", also gibt es 'nil' zurück, wenn die Zeichenfolge ungültig ist. Sie können auch 'Float (yourString) ?? 0, wenn Sie "0" zu "Null" bevorzugen. –

Antwort

0

Wie wäre es damit:

pref.thumbnailSize = NSNumberFormatter().numberFromString(sizeTextfield.stringValue)?.floatValue ?? 0 

Statt 0 Sie einen Standardwert angeben können, die Sie verwenden möchten. Wenn Sie pref.thumbnailSize unverändert bleiben soll, wenn numberFromString kehrt nil, benutzen Sie diese:

pref.thumbnailSize = NSNumberFormatter().numberFromString(sizeTextfield.stringValue)?.floatValue ?? pref.thumbnailSize 
+0

Oh - daran habe ich nicht gedacht. Wenn der numberFromString-Wert also nil ist, wird der .floatValue-Aufruf nicht fehlschlagen. Es wird nur die ganze Sache auf Null auflösen, oder? –

+0

Ja, das stimmt. –