提问人:OSSlayer 提问时间:3/14/2023 更新时间:3/14/2023 访问量:29
float 到 float 的 swift 类型转换给出 nil
Swift type cast of float to float gives nil
问:
我正在尝试将从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
#1
浮点数的 JSON 解析将生成 类型的值,而不是 。Double
Float
用:
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]
Codable
JSONDecoder
评论
0赞
OSSlayer
3/14/2023
谢谢,这奏效了。我认为 JSON 将其转换为有问题,因为整数总是没问题的。关于使用 Codable 的话题,我打算这样做,但我选择了 .jsonObject,因为我希望 JSON 文件非常可修改,类似于 Dwarf Fortress 中的原始文件。此文件包含生物群落的数据,我希望用户能够删除或添加内容。每个生物群落都有特定的属性,所以我想我可以将它们捆绑在一个可编码的类中,然后将附加功能捆绑在某种标签系统中。
评论
print(type(of: biome["Max Height"]))