【发布时间】:2018-01-25 20:08:49
【问题描述】:
我有一个Codable 类,其中包含一个包含String 键和值的字典,可能是Strings、Ints 或符合Codable 的自定义结构。我的问题是:
如何定义具有Codable 值的字典?
我希望这已经足够了
var data: [String: Codable] = [:]
但显然这使我的课程不再符合Codable。我认为这里的问题与我在这里的问题相同,我传递的是协议而不是受协议约束的对象
Using JSON Encoder to encode a variable with Codable as type
所以大概我需要一个受约束的泛型类型,比如AnyObject<Codable>,但这是不可能的。
编辑:回答
因此,由于无法按照公认的答案完成此操作,因此我采用了一个结构,其中包含每种数据类型的字典
struct CodableData {
var ints: [String: Int]
var strings: [String: String]
//...
init() {
ints = [:]
strings = [:]
}
}
var data = CodableData()
【问题讨论】:
-
这与 Codable 有什么关系?这真的不是关于 Swift 中的协议和类型吗?
-
这里的问题是您使用
Codable作为字典中的存在类型。你是对的,你需要将类型限制为某种东西,但即使AnyObject<Codable>也不会是它——你需要一些具体的,比如Int或String。您的字典将包含的类型是否有限制?你预计解码会发生什么?
标签: ios swift dictionary generics protocols