从Any转换为Double swift

时间:2017-09-28 13:11:43

标签: swift dictionary casting

我有一个简单的问题,我有这本词典:

let dict: [String: Any] = ["Area": "100", "YessorNo" : true]

而且,对于键area,我想将它的值转换为double,如下所示:

let a = dict["Area"] as? Double

当我打印a时,我得到nil,为什么?值100虽然是string,但它不是数字?为什么我不能把它投到double

3 个答案:

答案 0 :(得分:5)

您无法直接将String投射到Double,您需要使用正确的初始值设定项。

guard let numStr = dict["Area"] as? String else {
    return
}
let a = Double(numStr)

答案 1 :(得分:3)

首先,从Any转换为String,然后使用初始化程序将其转换为Double。

if let a = dict["Area"] as? String, let aDouble = Double(a) {
    print(aDouble)
}

答案 2 :(得分:0)

由于其他答案提供了代码,我将重点关注问题的原因。类型转换不会起作用,因为根据Swift文档,类型转换允许您将该实例视为与其自己的类层次结构中的其他位置不同的超类或子类。"由于double不是字符串的子类或超类,因此即使该字符串是数字的字符串,也不能将字符串转换为double。这就是为什么尝试将字符串转换为double返回nil。