【发布时间】:2021-05-12 19:09:28
【问题描述】:
我尝试用 Int enum 转换字典
enum TypeE: Int, Codable
{
case note = 1
case tab
}
let encoder = JSONEncoder()
let dictionary0 = [TypeE.note:"VALUE0", TypeE.tab:"VALUE1"]
var data = try encoder.encode(dictionary0)
var string = String(data: data, encoding: .utf8)!
// [1,"VALUE0",2,"VALUE1"]
print(string)
生成的json字符串输出为
[1,"VALUE0",2,"VALUE1"]
我觉得很奇怪。因为,生成的 json 字符串代表一个数组。
如果我测试了
let encoder = JSONEncoder()
let dictionary1 = [1:"VALUE0", 2:"VALUE1"]
var data = try encoder.encode(dictionary1)
var string = String(data: data, encoding: .utf8)!
// {"1":"VALUE0","2":"VALUE1"}
print(string)
生成的json字符串输出为
{"1":"VALUE0","2":"VALUE1"}
如果我使用 Int 枚举作为字典键,生成的 json 字符串将成为数组的表示?
我的代码有什么错误,还是我的预期不正确?
【问题讨论】:
-
JSON 字典键需要是一个字符串。这很奇怪,但我猜编码器试图修复它,将其转换为数组,但我预计会出现错误。