Cer*_*lin 26
在我的情况下,我只是想创建一个对象,而不是坚持它.所以segiddins这个解决方案对我不起作用.
斯威夫特3
在swift刚刚使用中创建用户对象的克隆
let newUser = User(value: oldUser);
新用户对象不会保留.
您可以使用以下内容创建对象的浅表副本,只要它没有主键即可:
realm.create(ObjectType.self, withValue: existingObject)
Run Code Online (Sandbox Code Playgroud)
截至2020年12月,这个问题还没有合适的解决方案。不过我们有很多解决方法。
这是我一直在使用的一种,我认为限制较少的一种。
class Dog: Object, Codable{
@objc dynamic var breed:String = "JustAnyDog"
}
Run Code Online (Sandbox Code Playgroud)
class RealmHelper {
//Used to expose generic
static func DetachedCopy<T:Codable>(of object:T) -> T?{
do{
let json = try JSONEncoder().encode(object)
return try JSONDecoder().decode(T.self, from: json)
}
catch let error{
print(error)
return nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
//Suppose your Realm managed object: let dog:Dog = RealmDBService.shared.getFirstDog()
guard let detachedDog = RealmHelper.DetachedCopy(of: dog) else{
print("Could not detach Dog")
return
}
//Change/mutate object properties as you want
detachedDog.breed = "rottweiler"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们借助 Swift 的 JSONEncoder 和 JSONDecoder,利用 Codable 的强大功能,无论领域对象下有多少嵌套对象,都可以进行真正的深度复制。只需确保您的所有领域模型类都符合 Codable。
虽然它不是一个理想的解决方案,但它是最有效的解决方法之一。
| 归档时间: |
|
| 查看次数: |
10570 次 |
| 最近记录: |