Swift 4中使用Decodable解析JSON时Int类型适配问题求助
问题解决:Swift Decodable解析JSON时的类型不匹配错误
嘿,这个问题的原因其实从错误提示里就能直接看出来啦!
错误根源
错误信息里明确指出:
Parsed JSON number <-77.20999999999999> does not fit in Int.
你的JSON数据中,coord节点下的lon和lat是浮点数类型(比如-77.21、38.84),但你在Coord结构体里却把这两个字段定义成了Int?(可选整数类型)——JSON解码器没办法把一个小数塞进整数变量里,所以就抛出了数据损坏的错误。
解决方案
只需要把Coord结构体里的lon和lat类型改成对应的浮点数类型即可,推荐用Double?(日常开发中精度足够),用Float?也可以。
修改后的结构体代码:
import Foundation struct TestingClass: Decodable{ let coord: Coord } struct Coord: Decodable{ // 将Int?替换为Double? let lon: Double? let lat: Double? }
额外说明
如果后续你需要把这些浮点数转换成整数,可以在解析完成后手动处理,比如:
if let lat = courses.coord.lat { let integerLat = Int(lat) print(integerLat) // 输出38 }
这样修改之后,你的解析代码就能正常运行,成功获取到coord节点的数据啦!
内容的提问来源于stack exchange,提问作者Benjamin So
相关产品推荐
相关产品推荐

