Ярлык, отображающий "Необязательно" ("#") в Swift при использовании NumberFormatter

У меня есть следующий код:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.maximumFractionDigits = 2
let formattedNumber = numberFormatter.string(from: NSNumber(value: rawValue))

currentLogBF.text = "\(formattedNumber) BF"

В приведенном выше примере rawValue представляет собой Double, который вычисляется, когда во всех полях ввода есть значения.

currentLogBF - это метка в моем представлении.

Всякий раз, когда вычисление завершено, метка отображает что-то вроде этого:

Optional("12,307.01") BF

Как мне избавиться от части "Optional()", чтобы она просто отображала это:

12,307.01 BF

Есть идеи, что я здесь делаю не так?

2 ответа

Функция numberFormatter.string(from: NSNumber) вернет вам String Optional (String?) вместо String.
Вам нужно будет сначала развернуть это так

if let formattedNumber = numberFormatter.string(from: NSNumber(value: rawValue)) {
    currentLogBF.text = "\(formattedNumber) BF"
} else {
    Log.warn("Failed to format number!")
}

И в качестве бонуса используйте String(format: "%@ BF", formattedNumber) скорее, чем "\(formattedNumber) BF" когда имеем дело с необязательным.
String (format:) выдаст вам ошибку компиляции, когда вы попытаетесь передать необязательное значение в качестве аргумента

Развертывание необязательного значения

let formattedNumber:String? = numberFormatter.string(from: NSNumber(value: rawValue))

currentLogBF.text = "\(formattedNumber!) BF" //optional string. This will result in nil while unwrapping an optional value if value is not initialized or if initialized to nil.

currentLogBF.text = "\(formattedNumber) BF" //Optional("optional string") //nil values are handled in this statement
Другие вопросы по тегам