我有一个对象,它从 Realm Object
子类,并且符合 Codable
,以便在与 API 通信时与 JSON 进行转换。
如何利用Codable
协议制作深层副本(包括子对象)?
这将利用Codable
协议创建对象的深层副本。正如 @itai-ferber 所提到的,与 NSCopying
相比,它将具有很高的开销。
class MyObject: Object, Codable {
/* details omitted */
var children = List<ChildObject>()
func copy() throws -> MyObject {
let data = try JSONEncoder().encode(self)
let copy = try JSONDecoder().decode(MyObject.self, from: data)
return copy
}
}
这个实现更通用一些,
extension Encodable where Self: Decodable {
func copy() throws -> Self {
let data = try JSONEncoder().encode(self)
return try JSONDecoder().decode(Self.self, from: data)
}
}