Created
February 26, 2019 10:51
-
-
Save ZalyalovIldar/754f3f4d1c2f9c6511373112b8de5d11 to your computer and use it in GitHub Desktop.
Realm Cascade delete
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Cascade delete object in Realm | |
/// | |
/// - warning: Call only in write transaction | |
/// - Parameters: | |
/// - object: Object to delete | |
/// - realm: Realm instance | |
/// - onlyProperties: removeOnly property (ex. before re-write/update model) | |
func cascadeDelete(_ object: Object, with realm: Realm, onlyProperties: Bool = false) { | |
guard !object.isInvalidated else { return } | |
for property in object.objectSchema.properties { | |
cascadeDelete(valueForKey: property.name, for: object, in: realm) | |
} | |
if !onlyProperties { | |
realm.delete(object) | |
} | |
} | |
/// Cascade delete by key path of model in Realm | |
/// | |
/// - warning: Call only in write transaction | |
/// - Parameters: | |
/// - key: key path of property | |
/// - object: Object model | |
/// - realm: Realm instance | |
func cascadeDelete(valueForKey key: String, for object: Object, in realm: Realm) { | |
guard let value = object.value(forKey: key) else { return } | |
if let object = value as? Object { | |
cascadeDelete(object, with: realm) | |
} | |
if let list = value as? List<Object> { | |
list.forEach { cascadeDelete($0, with: realm) } | |
} | |
} | |
//----Usage------- | |
// realm - current realm instance | |
// realmModels - array of Objects - [Object] | |
// User - Realm object | |
///Cascade delete of object | |
try! realm.write({ | |
realmModels.forEach{ cascadeDelete($0, with: realm) } | |
}) | |
///Cascade delete of object's property | |
try! realm.write({ | |
realmModels.forEach{ cascadeDelete(#keyPath(User.childObject), forObject: $0, in: realm) } | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment