Skip to content

Instantly share code, notes, and snippets.

@jemai
Created June 1, 2019 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jemai/529df2e2862fb348c0545f8e1b8a735b to your computer and use it in GitHub Desktop.
Save jemai/529df2e2862fb348c0545f8e1b8a735b to your computer and use it in GitHub Desktop.
extension Persister {
// MARK: - Read Methods
static func select<T: CodableObject>(type: T.Type, filter: NSPredicate? = nil) -> Results<T> {
do {
let realm = try Realm()
if let predicate = filter {
return realm.objects(T.self).filter(predicate)
} else {
return realm.objects(T.self)
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
// MARK: - Write methods
static func insert(object: CodableObject, update: Bool? = nil) {
do {
let realm = try Realm()
try realm.write {
if let update = update {
realm.add(object, update: update)
} else {
realm.add(object)
}
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
static func insert(objects: [CodableObject], update: Bool? = nil) {
do {
let realm = try Realm()
try realm.write {
if let update = update {
realm.add(objects, update: update)
} else {
realm.add(objects)
}
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
static func delete(object: CodableObject) {
// Delete an object with a transaction
do {
let realm = try Realm()
try realm.write {
realm.delete(object)
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
static func delete<T: CodableObject>(type: T.Type, filter: NSPredicate?) {
do {
let realm = try Realm()
try realm.write {
if let predicate = filter {
realm.delete(realm.objects(T.self).filter(predicate))
} else {
realm.delete(realm.objects(T.self))
}
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
static func resetDB() {
// Delete an object with a transaction
do {
let realm = try Realm()
try realm.write {
realm.deleteAll()
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
static func deleteAll<T: CodableObject>(type: T.Type) {
// Delete an object with a transaction
do {
let realm = try Realm()
try realm.write {
realm.delete(realm.objects(T.self))
}
} catch let error as NSError {
fatalError("Error opening Realm: \(error)")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment