Swift: AnyObject 转换为 Float 失败

Swift: AnyObject cast to Float failed

let json = [
    "left" : 18,
    "deadline" : "May 10",
    "progress" : 0.6
] as [String: AnyObject]

let ss = json["progress"] as? Float
let sss = json["progress"] as? Double
print("ss = \(ss)\n  sss = \(sss)")

我不知道为什么 ss 显示 nil 而 sss 显示 0.599999998。为什么投射到 Float 得到零?你们有什么方法可以让我得到正确的结果吗?

0.6 是一个 Double 字面值 。因此,您不能将其转换为 Float(您需要 转换 它)。

试试这个:

let f = Float(json["progress"] as! Double)

或者,如果您不确定此 AnyObject 包含的数字类型,更安全的方法是:

let f = (json["progress"] as! NSNumber).floatValue

当然,如果缺少 json 值 你误判预期类型。如果您不这么认为,请改用 as? 运算符:)


选角速成班。将已知的 Double 值转换为 Float 时,编译器会提醒我们:

let d = 0.6
let f = d as? Float

warning: cast from 'Double' to unrelated type 'Float' always fails