Ярлык, отображающий "Необязательно" ("#") в 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