【发布时间】:2023-04-08 06:23:01
【问题描述】:
我目前有一个关于 Swift 4.2 的问题,我想请求人们帮助解决。
目前,我正在反序列化一个 JSON 响应,它是一个字典,其键的类型为 String,其值的类型可以为 Int 或 Bool。一个很好的例子如下:
{
"number_of_likes": 0,
"is_liked": true
}
当我反序列化对象时,JSON 响应的类型为 [String: Any],这是预期的。
任务:
我需要创建一个数组,详细说明哪些键的类型为 Bool 并设置为 true。
问题:
使用上面突出显示的响应运行以下代码时:
guard let json = json as? [String: Any] else {
return
}
for key in dict.keys {
print("KEY: \(key)")
let value = dict[key]
if value is Int {
print("It is an integer")
}
if value is Bool {
print("It is a bool")
}
}
返回字符串
控制台打印如下:
???? t+20.765 KEY: number_of_likes
???? t+20.765 It is an integer
???? t+20.765 It is a bool
???? t+20.765 KEY: is_liked
???? t+20.765 It is an integer
???? t+20.765 It is a bool
如您所见,0 Int 值导致控制台打印它是 Bool 和 Int 类型,而 true Bool 值导致要打印的控制台是 Int 和 Bool 类型。
对于上下文,我确实在 StackOverflow 上找到了以下问题,但除非我检查类型 CFBool 而不是类型 Bool,否则答案不起作用。
Is it possible to distinguish Bool and Int in Swift?
如果我做错了什么,或者这是 Swift 4.2 的问题,有人可以告诉我吗?
非常感谢您的帮助,因此感谢所有阅读本文的人。
【问题讨论】:
-
您显示的代码不足以解释您声称的输出。请显示真实完整的代码。从实际的 JSON 字符串开始,展示如何从中获取
json。您应该使用 Decodable,但似乎没有。 -
除了你的输出之外,你不应该提前知道一个键是 bool 还是 Int 并相应地对其进行硬编码??
-
什么是
dict?使用结构而不是字典
标签: swift