gpt4 book ai didi

ios - RealmSwift : Detach an object from Realm, 包括其列表类型的属性

转载 作者:搜寻专家 更新时间:2023-11-01 05:45:52 25 4
gpt4 key购买 nike

我想创建一个持久化对象的副本,这样新实例具有所有相同的值但不附加到 Realm。使用 Object(value: persistedInstance) 非常适合属性都是字符串、日期、数字等的类。但是,当复制具有 List 类型属性的类的实例时,副本的 List 和 List 的元素继续引用持久化的记录。我如何创建一个完全脱离 Realm 的副本,包括任何列表和这些列表中的元素?

最佳答案

您可以通过以下扩展函数对您的对象进行深度复制:

    import UIKit
import Realm
import RealmSwift

protocol RealmListDetachable {

func detached() -> Self
}

extension List: RealmListDetachable where Element: Object {

func detached() -> List<Element> {
let detached = self.detached
let result = List<Element>()
result.append(objectsIn: detached)
return result
}

}

@objc extension Object {

public func detached() -> Self {
let detached = type(of: self).init()
for property in objectSchema.properties {
guard
property != objectSchema.primaryKeyProperty,
let value = value(forKey: property.name)
else { continue }
if let detachable = value as? Object {
detached.setValue(detachable.detached(), forKey: property.name)
} else if let list = value as? RealmListDetachable {
detached.setValue(list.detached(), forKey: property.name)
} else {
detached.setValue(value, forKey: property.name)
}
}
return detached
}
}

extension Sequence where Iterator.Element: Object {

public var detached: [Element] {
return self.map({ $0.detached() })
}

}

使用

/// in collections
let data = realm.objects(AbcDfg.self).detached

/// single object
data.first?.detached()

关于ios - RealmSwift : Detach an object from Realm, 包括其列表类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37140430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com