Swift 使用任何类型的可编码对象创建可编码对象?

Swift 使用任何类型的可编码对象创建可编码对象?,swift,codable,Swift,Codable,我希望创建一个类来存储日期和符合可编码协议的任何对象。我希望这个类也符合Codable协议本身 我可以对一个对象执行以下操作: class CodableContainerA: NSObject, Codable { var date: Date? var item: CodableTypeA? } class CodableContainer: NSObject, Codable { var date: Date? var item: CodableBaseC

我希望创建一个类来存储
日期
和符合
可编码
协议的任何对象。我希望这个类也符合
Codable
协议本身

我可以对一个对象执行以下操作:

class CodableContainerA: NSObject, Codable {
    var date: Date?
    var item: CodableTypeA?
}
class CodableContainer: NSObject, Codable {
    var date: Date?
    var item: CodableBaseClass?
}
我宁愿不必为我拥有的每个CodableTypeX创建单独的CodableContainerX

我当前的解决方法是创建一个名为
CodableBaseClass
的类,该类符合
Codable
,从中派生每个CodableType,并按如下方式定义我的类:

class CodableContainerA: NSObject, Codable {
    var date: Date?
    var item: CodableTypeA?
}
class CodableContainer: NSObject, Codable {
    var date: Date?
    var item: CodableBaseClass?
}
这似乎有很长的路要走,而且我觉得我应该能够通过使
CodableType
s符合协议来做到这一点,但我不确定如何做到。如果我将
定义为
可编码?
(任何可编码)
类型,我会收到一个错误,说明

类型“CodableContainer”不符合协议“Decodable”

我用的是Swift 4


任何帮助或建议都将被感激地接受。非常感谢,

这就是泛型类的用途:

class CodableContainer<T: Codable>: NSObject, Codable {
    var date: Date?
    var item: T?
}
class CodableContainer:NSObject,可编码{
var日期:日期?
变量项:T?
}

这就是泛型类的用途:

class CodableContainer<T: Codable>: NSObject, Codable {
    var date: Date?
    var item: T?
}
class CodableContainer:NSObject,可编码{
var日期:日期?
变量项:T?
}

每当您发现自己想为每个底层类型创建一个单独的类时,请思考。例如

显然,使用任何你想要的
dateDecodingStrategy
。但是你可以用以下方法解码:

let result = try CodableContainer<Foo>.decodeJSON(data)
let result=try CodableContainer.decodeJSON(数据)

每当您发现自己想为每个底层类型创建一个单独的类时,请思考。例如

显然,使用任何你想要的
dateDecodingStrategy
。但是你可以用以下方法解码:

let result = try CodableContainer<Foo>.decodeJSON(data)
let result=try CodableContainer.decodeJSON(数据)

我已将code Different的答案标记为已接受的答案,因为这是第一个更简洁的答案,但我非常感谢您的答案和建议,我已将它们纳入我的代码中。这些都是我今天一直想知道的事情,但我想在我把它做好之前我会让它工作的。希望我的代码现在都是!非常感谢。我已经将Code Different的答案标记为已接受的答案,因为它是第一个且更简洁的答案,但我确实非常感谢您的答案和建议,并且我已经将它们纳入了我的代码中。这些都是我今天一直想知道的事情,但我想在我把它做好之前我会让它工作的。希望我的代码现在都是!非常感谢。