【发布时间】:2018-07-20 16:58:14
【问题描述】:
我只是好奇如何将带有String 键和Encodable 值的字典编码为 JSON。
例如:
let dict: [String: Encodable] = [
"Int": 1,
"Double": 3.14,
"Bool": false,
"String": "test"
]
这个dict中的key都是String类型,但是value的类型不同。
但是,JSON 中允许所有这些类型。
我想知道是否有办法在 Swift 4 中使用 JSONEncoder 将此 dict 编码为 JSON Data。
我知道有其他方法可以不使用JSONEncoder 来实现这一点,但我只是想知道JSONEncoder 是否能够管理这一点。
Dictionary 在扩展中确实有一个func encode(to encoder: Encoder) throws,但这仅适用于约束Key: Encodable, Key: Hashable, Value: Encodable,而对于我们的dict,它需要约束Key: Encodable, Key: Hashable, Value == Encodable。
为此拥有struct 就足以使用JSONEncoder,
struct Test: Encodable {
let int = 1
let double = 3.14
let bool = false
let string = "test"
}
但是,我很想知道是否可以在不指定具体类型而只指定 Encodable 协议的情况下完成它。
【问题讨论】:
-
你不能这样做,
Codable严重依赖具体类型。encode(是一个泛型方法,它需要一个符合Encodable而不是协议本身的 concrete 类型。
标签: dictionary swift4 jsonencoder encodable