NSNumberFormatter запутался в минусе?
Проверь это:
(lldb) po NSNumberFormatter().numberFromString("+10.6")
nil
(lldb) po NSNumberFormatter().numberFromString("10.6")
▿ Optional(10.6)
(lldb) po NSNumberFormatter().numberFromString("-10.6")
▿ Optional(-10.6)
Таким образом, очевидно, что добавление знака минус к числу вполне допустимо, но знак плюс - нет. Это ожидаемое поведение, и так ли это, кто-нибудь знает почему?
2 ответа
Решение
Я не могу сказать, почему NSNumberFormatter не допускает знак "+", но тип Floift в Swift выглядит умнее:
Float("10.6") --> 10.6
Float("+10.6") --> 10.6
Float("-10.6") --> -10.6
Float("Garbage") --> nil
Он не возвращает NSNumber, но я думаю, вы всегда можете набрать приведение / преобразование.
Вы должны явно сказать своему NSNumberFormatter
экземпляр что делать.
Это работает на детской площадке Xcode:
import Foundation
// this outputs "nil"
let bustedNnumber = NSNumberFormatter().numberFromString("+10.6")
// this outputs "-10.6"
let minusnumber = NSNumberFormatter().numberFromString("-10.6")
let nf = NSNumberFormatter()
nf.numberStyle = .DecimalStyle
nf.positivePrefix = "+"
// this outputs "10.6"
let positiveNumber = nf.numberFromString("+10.6")