Для немного более быстрого ощущения, используя NSFormatter()
, избегает кастинга NSString
и возвращает nil
, когда строка не содержит значения Double
(например, «тест» не вернет 0.0
).
let double = NSNumberFormatter().numberFromString(myString)?.doubleValue
Альтернативно, расширяя тип String
Swift:
extension String {
func toDouble() -> Double? {
return NSNumberFormatter().numberFromString(self)?.doubleValue
}
}
и используйте его как toInt()
:
var myString = "4.2"
var myDouble = myString.toDouble()
Это возвращает необязательно Double?
, который необходимо развернуть.
Либо с принудительной разверткой:
println("The value is \(myDouble!)") // prints: The value is 4.2
, либо с помощью инструкции if let:
if let myDouble = myDouble {
println("The value is \(myDouble)") // prints: The value is 4.2
}
Update : Для локализации очень легко применять локали к NSFormatter следующим образом:
let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "fr_FR")
let double = formatter.numberFromString("100,25")
Наконец, вы можете использовать NSNumberFormatterCurrencyStyle
в форматировании, если работаете с валютами, где строка содержит валюту символ.