Swift:转换为Float的AnyObject失败

时间:2017-04-26 01:31:22

标签: swift casting

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)")

我不知道为什么sssss显示0.599999998时显示为零。为什么施法Float为零?你们有一些方法可以让我得到正确的结果吗?

1 个答案:

答案 0 :(得分:1)

0.6Double 字面值。因此,您无法将其投射到Float(您需要转换它)。

请改为尝试:

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

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

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

当然,如果json值缺失您错误判断了预期的类型,那么上面的as!会崩溃 hard 。如果您不这样做,请使用as?运算符:)

投射速成课程。将已知的Double值转换为Float时,编译器会为此提供一个很好的提示:

let d = 0.6
let f = d as? Float
  

警告:来自' Double'不相关的类型' Float'总是失败