Проблема в том, что строка "250.89"
(после удаления символа валюты) не может быть преобразована в Int
, поскольку 250.89
не является целым числом. Так что исправьте свой код, преобразовав его в Double
func dollarsToCents() -> Int {
var temp = self
temp.removeAll { "$,".contains($0) }
//temp = temp.replacingOccurrences(of: "[$,]", with: "", options: .regularExpression)
return Int(((Double(temp) ?? 0) * 100).rounded())
}
или если ваш "номер" всегда имеет два десятичных знака
func dollarsToCents() -> Int {
var temp = self
temp.removeAll { !("0"..."9" ~= $0) }
return Int(temp) ?? 0
}
Но я думаю, что решение намного проще. Ваша цель - сохранить значение цена как число (Double
, ...). Тогда вам не нужно конвертировать String
в Double
, и вы можете просто умножить свой номер. Затем, когда вам нужно добавить символ валюты, просто конвертируйте значение в String
и добавьте $
или используйте NumberFormatter
let price = 250.89
let formattedPrice = "$\(price)" // $250.89
let price = 250.89
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = "USD"
let formattedPrice = formatter.string(from: price as NSNumber)! // $250.89