Skip to content

eugene-software/EZADatabase

Repository files navigation

EZADatabase

Version License Platform

Requirements

  • iOS 13 and above

Usage Example

Import dependenices:

import Combine
import EZADatabase

In AppDelegate run setup method:

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    EZADatabase
            .openDatabase(in: application)
            .sink { _ in }
            .store(in: &cancellables)
    return true
}

Create CoreDataCompatible struct that reflects a CoreData model:

struct User: Codable, Hashable {
    
    var userId: String
    var userName: String
}

extension User: CoreDataCompatible {
    
    typealias ManagedType = CoreDataUser
    
    var primaryKey: Any {
        return userId
    }
    
    var primaryKeyName: String {
        return "userId"
    }
    
    init(managedObject: CoreDataUser) {
        
        userId = managedObject.userId
        userName = managedObject.userName
    }
}

Create NSManagedObject subclass that conforms to CoreDataExportable and reflects a CoreDataCompatible model:

@objc(CoreDataUser)
class CoreDataUser: NSManagedObject {

    @NSManaged var userId: String
    @NSManaged var userName: String
}

extension CoreDataUser : CoreDataExportable {
    
    typealias ExportType = User
    
    func configure(with object: User, in storage: EZADatabase.CoreDataStorageInterface) {
        
        userId = object.userId
        userName = object.userName
    }
    
    func getObject() -> Device {
        User(managedObject: self)
    }
}
  • To store an object:
let user = User(userId: "someId", userName: "John")

EZADatabase.importRemoteList([user])
    .sink { completion in
        
    } receiveValue: { _ in
        
    }
    .store(in: &cancellables)
  • To receive an object:
EZADatabase.exportRemoteList(predicate: NSPredicate(key: "userId", value: "someId"))
    .sink { completion in
        
    } receiveValue: { user in
        print(user)
    }
    .store(in: &cancellables)

Installation

Cocoapods

EZADatabase is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'EZADatabase'

Swift Package Manager

  1. Right click in the Project Navigator
  2. Select "Add Packages..."
  3. Search for https://github.com/eugene-software/EZADatabase.git

Author

Eugene Software

License

EZADatabase is available under the MIT license. See the LICENSE file for more info.