Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. import Realm
  2. import RealmSwift
  3.  
  4. class RealmManager {
  5. static let shared = RealmManager()
  6.  
  7. private func getRealm() -> Realm {
  8. if let _ = NSClassFromString("XCTest") {
  9. return try! Realm(configuration: Realm.Configuration(fileURL: nil, inMemoryIdentifier: "test", encryptionKey: nil, readOnly: false, schemaVersion: 0, migrationBlock: nil, objectTypes: nil))
  10. } else {
  11. return try! Realm();
  12. }
  13. }
  14.  
  15. func objects<T: Object>(_ type: T.Type, predicate: NSPredicate? = nil) -> Results<T>? {
  16. if !isRealmAccessible() { return nil }
  17.  
  18. let realm = getRealm()
  19. realm.refresh()
  20.  
  21. return predicate == nil ? realm.objects(type) : realm.objects(type).filter(predicate!)
  22. }
  23.  
  24. func object<T: Object>(_ type: T.Type, key: Any) -> T? {
  25. if !isRealmAccessible() { return nil }
  26.  
  27. let realm = getRealm()
  28. realm.refresh()
  29.  
  30. return realm.object(ofType: type, forPrimaryKey: key)
  31. }
  32.  
  33. func add<T: Object>(_ data: [T], update: Bool = true) {
  34. if !isRealmAccessible() { return }
  35.  
  36. let realm = getRealm()
  37. realm.refresh()
  38.  
  39. if realm.isInWriteTransaction {
  40. realm.add(data, update: update)
  41. } else {
  42. try? realm.write {
  43. realm.add(data, update: update)
  44. }
  45. }
  46. }
  47.  
  48. func add<T: Object>(_ data: T, update: Bool = true) {
  49. add([data], update: update)
  50. }
  51.  
  52. func runTransaction(action: () -> Void) {
  53. if !isRealmAccessible() { return }
  54.  
  55. let realm = getRealm()
  56. realm.refresh()
  57.  
  58. try? realm.write {
  59. action()
  60. }
  61. }
  62.  
  63. func delete<T: Object>(_ data: [T]) {
  64. let realm = getRealm()
  65. realm.refresh()
  66. try? realm.write { realm.delete(data) }
  67. }
  68.  
  69. func delete<T: Object>(_ data: T) {
  70. delete([data])
  71. }
  72.  
  73. func clearAllData() {
  74. if !isRealmAccessible() { return }
  75.  
  76. let realm = getRealm()
  77. realm.refresh()
  78. try? realm.write { realm.deleteAll() }
  79. }
  80. }
  81.  
  82. extension RealmManager {
  83. func isRealmAccessible() -> Bool {
  84. do { _ = try Realm() } catch {
  85. print("Realm is not accessible")
  86. return false
  87. }
  88. return true
  89. }
  90.  
  91. func configureRealm() {
  92. let config = RLMRealmConfiguration.default()
  93. config.deleteRealmIfMigrationNeeded = true
  94. RLMRealmConfiguration.setDefault(config)
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement