swift - 在 swift 中解析 float 时出现问题?

标签 swift dictionary

今天在从字典取值的时候遇到了一个很奇怪的情况,我这里做了两个案例。

案例一

如果我在下面写代码

let str = "{\"num\":2}"

var dict = convertToDictionary(text: str)!

if let num = dict["num"] as? Float {
    print("Value is \(num)")
} else {
    print("parse error")
}

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

如您所见,键 num 的值是 Integer,但是从字典中获取值时,我希望值是 Float。所以它应该转到 else block ,但它会打印值。

案例二

var test = 2
var dict:[String:Any] = [String:Any]()
dict["num"] = test
if let num = dict["num"] as? Float {
        print("Value is \(num)")
} else {
        print("parse error")
}

因为我没有定义数据类型,所以默认情况下它应该是整数,我希望值是 Float。这确实如我所料 现在这里不打印值,它显示 parse error

请向我解释为什么会这样?

最佳答案

答案是 - 这两种情况下的字典实际上并不相同。

在第二种情况下,dict["num"] 的值是 Int 类型的,因为你明确地给它分配了一个 Int .

然而,在第一种情况下,您通过 JSONSerialization 获得字典,它将数字转换为 NSNumber 实例。所以,dict["num"] 的值是NSNumber 类型。并且使用 Int 初始化的 NSNumber 可以成功地转换为 IntFloat

关于swift - 在 swift 中解析 float 时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704416/

相关文章:

swift - Swift 中的视频合并方向

python - 组合行中的字典列表,然后从中提取字符串以形成新行

ios - 如何在可移动的两个UIView之间重新绘制连线

ios - 结果图像方向的 AVFoundation CaptureStillImage 问题

swift - 字典中的递增数字

list - 如何使用 "reduce"获取 Dart/Flutter 中对象列表中的值的总和

python - 如何遍历字典——一次 n 个键值对

c++ - std::map 迭代器到自身

arrays - 快速数组/字典建议

xcode - 通过单击更改 UIButton 的图像 - XCode 6 Swift