Skip to content

Instantly share code, notes, and snippets.

@vitsky91
Forked from ohetzendorfer/RealmService.swift
Created June 21, 2022 11:25
Show Gist options
  • Save vitsky91/6554ee7c1340e183dbe2f884db5ed505 to your computer and use it in GitHub Desktop.
Save vitsky91/6554ee7c1340e183dbe2f884db5ed505 to your computer and use it in GitHub Desktop.
Collection of realm operations. Requires ResultsExtension.swift
import RealmSwift
internal struct RealmService {
private static var realm: Realm? {
do {
return try Realm()
} catch let error as NSError {
print(error)
return nil
}
}
// MARK: - Add operations
internal static func add<T: Object>(object: T) {
guard let realm = realm else { return }
do {
try realm.write({
realm.add(object)
})
} catch {
showError()
}
}
internal static func add<T: Object>(array: [T]) {
guard let realm = realm else { return }
do {
try realm.write({
realm.add(array)
})
} catch {
showError()
}
}
// MARK: - Get operations
internal static func get<T: Object>(objectsOfInstanceType instanceType: T.Type, withPredicate predicate: NSPredicate? = nil) -> Results<T>? {
guard let realm = realm else { return nil }
var objects = realm.objects(instanceType)
if let predicate = predicate {
objects = objects.filter(predicate)
}
guard !objects.isEmpty else { return nil }
return objects
}
internal static func get<T: Object>(arrayOfInstanceType instanceType: T.Type, withPredicate predicate: NSPredicate? = nil) -> [T]? {
guard let objects = get(objectsOfInstanceType: instanceType, withPredicate: predicate) else { return nil }
return objects.toArray()
}
// MARK: - Remove operations
internal static func remove<T: Object>(object: T) {
guard let realm = realm else { return }
realm.beginWrite()
realm.delete(object)
commitWrite(inRealm: realm)
}
internal static func remove<T: Object>(objectsOfInstanceType instanceType: T.Type) {
guard let realm = realm else { return }
let objects = realm.objects(instanceType)
realm.beginWrite()
realm.delete(objects)
commitWrite(inRealm: realm)
}
// MARK: - Operations
internal static func areObjectsAvailable<T: Object>(ofInstanceType instanceType: T.Type, withPredicate predicate: NSPredicate) -> Bool {
guard let _ = get(objectsOfInstanceType: instanceType, withPredicate: predicate) else { return false }
return true
}
// MARK: - Helpers
private static func commitWrite(inRealm realm: Realm) {
do {
try realm.commitWrite()
} catch {
showError()
}
}
private static func showError() {
print("Realm Error")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment