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