鉴于此课程:
class MyClass: Codable {
var variable : Codable? = nil
}
我收到错误:
输入' MyClass'不符合协议' Decodable'
输入' MyClass'不符合协议' Encodable'
如何将一个符合Codable的泛型变量作为Codable类中的属性?
答案 0 :(得分:2)
如果我正确地提出你的问题可能会是这样的
class MyClass<T: Codable>: Codable {
var variable : T? = nil
}
答案 1 :(得分:2)
如果您尝试实施解码器,您将拥有以下内容:
class MyClass: Codable {
var variable: Codable?
enum MyClassKeys: String, CodingKey {
case variable = "variable"
}
required init(from decoder: Decoder) {
let container = try! decoder.container(keyedBy: MyClassKeys.self)
variable = try! container.decode(XXXX, forKey: .variable)
}
}
但是你应该放置一个类类型(例如String.self
)而不是XXXX。你能放在这里什么?编译器无法猜出你想要什么。您可以使用符合Codable
协议的类来代替Codable
类型。所以你可以这样:
class MyClass: Codable {
var variable: MyClass?
enum MyClassKeys: String, CodingKey {
case variable = "variable"
}
required init(from decoder: Decoder) {
let container = try! decoder.container(keyedBy: MyClassKeys.self)
variable = try! container.decode(MyClass.self, forKey: .variable)
}
}
答案 2 :(得分:0)
你不能。
但作为一种解决方法,您可以创建符合Codable的enum
。
enum SubType: Codable {
case foo
case bar
}