一个解析json变量并返回float的简单函数。
func parseMyFloat(jsonString: String) -> Float? {
if let data = jsonString.data(using: String.Encoding.utf8, allowLossyConversion: true),
let parsedJSON = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String : Any] {
if let parsedJSON = parsedJSON {
return parsedJSON["myFloat"] as? Float
}
}
return nil
}
现在如果我试试这个。
print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998046875}"))
// output: 23.2322998
输出正常,但如果我将23.2322998046875
值更改为23.2322998046
,则func返回nil。
print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998}"))
// output: nil
然后我尝试将Any转换为Float,它不起作用。
let dic:[String : Any] = ["float1" : 23.2322998046875, "float2" : 23.2322998]
print(dic["float1"] as? Float) // prints nil
print(dic["float2"] as? Float) // prints nil
我的代码中有很多浮动,所以在迁移到swift 4.1后我遇到了这个问题。
我应该将所有Float
更改为Double
' s ?? 23.2322998046875
为什么有效,为什么不呢23.2322998
??
答案 0 :(得分:1)
如果您希望保持功能不变并且不想将返回值修改为Double
,则只需将JSON值解析为Double
即可避免Double
。 3}}如评论中所述,然后在返回之前将Float
转换为func parseMyFloat(jsonString: String) -> Float? {
if let data = jsonString.data(using: String.Encoding.utf8, allowLossyConversion: true), let parsedJSON = (try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments)) as? [String : Any], let myDouble = parsedJSON["myFloat"] as? Double {
return Float(myDouble)
}
return nil
}
parseMyFloat(jsonString: "{\"myFloat\":23.2322998046875}") //23.2323998
parseMyFloat(jsonString: "{\"myFloat\":23.2322998}") //23.2323998
。
{{1}}