float 到 float 的 swift 类型转换给出 nil

Swift type cast of float to float gives nil

提问人:OSSlayer 提问时间:3/14/2023 更新时间:3/14/2023 访问量:29

问:

我正在尝试将从JSON文件读取的数字转换为浮点数。这个数字是 0.35,但是当我尝试对浮点数使用强制转换时,它给出了 nil。代码如下:as?

let maxHeight = biome["Max Height"] as? Float
print(biome["Max Height"]) // Prints '0.35'
print(maxHeight) // Prints 'nil'

这本字典以前被铸造为 ,这是我唯一能看到对它有影响的东西。我不知道为什么它返回 nil,因为 0.35 应该是一个有效的浮点数。biome[String:Any]

我以为它只会投射到浮子上,因为它是一个浮子,但事实并非如此。

快速 铸造

评论

0赞 HangarRash 3/14/2023
以下说明什么:?print(type(of: biome["Max Height"]))
0赞 OSSlayer 3/14/2023
显示 Optional<Any>

答:

0赞 HangarRash 3/14/2023 #1

浮点数的 JSON 解析将生成 类型的值,而不是 。DoubleFloat

用:

let maxHeight = biome["Max Height"] as? Double

会给你期望值。如果你真的想要一个类型的值,那么你可以做这样的事情:Float

if let val = biome["Max Height"] as? Double {
    let maxHeight = Float(val)
    // do stuff with maxHeight
}

您应该考虑更改解析 JSON 的方式,以便将其转换为具有所需类型适当属性的适当属性,而不是以 type .研究使用 和 .struct[String: Any]CodableJSONDecoder

评论

0赞 OSSlayer 3/14/2023
谢谢,这奏效了。我认为 JSON 将其转换为有问题,因为整数总是没问题的。关于使用 Codable 的话题,我打算这样做,但我选择了 .jsonObject,因为我希望 JSON 文件非常可修改,类似于 Dwarf Fortress 中的原始文件。此文件包含生物群落的数据,我希望用户能够删除或添加内容。每个生物群落都有特定的属性,所以我想我可以将它们捆绑在一个可编码的类中,然后将附加功能捆绑在某种标签系统中。