Skip to content

Anastasia-Petrova/EasyCoreData

Repository files navigation

EasyCoreData

CircleCI

  • Helps you quickly assemble CoreData stack

  • Provides a generic wrapper around NSFetchedResultsController

Installation:

Swift Package Manager

If you want to use EasyCoreData in any other project that uses SwiftPM, add the package as a dependency in Package.swift:

dependencies: [
  .package(url: "https://github.com/Anastasia-Petrova/EasyCoreData.git", from: "0.2.0"),
]

Example of Usage:

  1. Initialize CoreDataController specialized with PersonManagedObject and decoded into PersonViewModel:

    let coreDataController = CoreDataController<PersonManagedObject, PersonViewModel>(
    	entityName: PersonManagedObject.firstName, 
    	keyForSort: PersonManagedObject.firstName, 
    	sectionKey: PersonManagedObject.lastName
    )
  2. Set update callbacks:

    coreDataController.beginUpdate = {
        tableView.beginUpdates()
    }
    coreDataController.endUpdate = {
        tableView.endUpdates()
    }
  3. Set change callback:

    coreDataController.changeCallback = { change in
        switch change.type {
        case let .row(rowChangeType):
            switch rowChangeType {
            case let .delete(indexPath):
                tableView.deleteRows(at: [indexPath], with: .automatic)
            case let .insert(indexPath):
                tableView.insertRows(at: [indexPath], with: .automatic)
            case let .move(fromIndexPath, toIndexPath):
                tableView.deleteRows(at: [fromIndexPath], with: .automatic)
                tableView.insertRows(at: [toIndexPath], with: .automatic)
            case let .update(indexPath):
                tableView.reloadRows(at: [indexPath], with: .automatic)
            case let .error(error):
                print(error)
            }
        case let .section(sectionChangeType):
            switch sectionChangeType {
            case let .delete(index):
                tableView.deleteSections(IndexSet(integer: index), with: .automatic)
            case let .insert(index):
                tableView.insertSections(IndexSet(integer: index), with: .automatic)
            case let .error(error):
                print(error)
            }
        }
    }

    To Do:

  • Implement generic CoreDataController that wraps NSFetchedResultsController
  • Implement CoreDataStack that assembles stack
  • Unit Test CoreDataController
  • Unit Test CoreDataStack