我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?

在Objective-C中,我可以这样做:

double myDouble = [myString doubleValue];

但是如何在Swift语言中实现这一点呢?


当前回答

在Swift 2.0中使用此代码

let strWithFloat = "78.65"
let floatFromString = Double(strWithFloat)

其他回答

Swift 2更新 有新的可失败的初始化器,允许你以更习惯和安全的方式来做这件事(正如许多答案所指出的,NSString的double值不是很安全,因为它对非数字值返回0。这意味着"foo"和"0"的doubleValue是相同的。)

let myDouble = Double(myString)

这将返回一个可选值,因此在诸如传入"foo"时doubleValue将返回0,可失败的初始化器将返回nil。您可以使用守卫、if-let或映射来处理Optional<Double>

原来的帖子: 你不需要像接受的答案那样使用NSString构造函数。你可以像这样简单地桥接它:

(swiftString as NSString).doubleValue

或者你可以这样做:

var myDouble = Double((mySwiftString.text as NSString).doubleValue)

我发现更可读添加一个扩展字符串如下:

extension String {
    var doubleValue: Double {
        return (self as NSString).doubleValue
    }
}

然后你就可以写代码了:

myDouble = myString.doubleValue

试试这个:

   var myDouble = myString.bridgeToObjectiveC().doubleValue
   println(myDouble)

NOTE

在Beta 5中删除。这已经不管用了?

另一个选项是将this转换为NSString并使用它:

let string = NSString(string: mySwiftString)
string.doubleValue