制作符合可编码对象的(深层)副本



我有一个对象,它从 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)
    }
}

相关内容

  • 没有找到相关文章

最新更新