Created
November 8, 2018 08:40
-
-
Save adiki/aa47b7fe8e10188bb8215a80a0fb75ec to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let gifsProvider: AnyObjectsProvider<GIF> = objectsManager.makeGIFsProvider() | |
protocol ObjectsManager { | |
var defaultGIFPredicate: NSPredicate { get } | |
func makeGIFsProvider() -> AnyObjectsProvider<GIF> | |
func save(gifs: [GIF]) -> Completable | |
func hide(gif: GIF) | |
static func makeObjectsManager(logger: Logger, completion: @escaping (ObjectsManager) -> Void) | |
} | |
protocol ObjectsProvider { | |
associatedtype Object | |
var updates: Observable<[Update]> { get } | |
func numberOfObjects() -> Int | |
func object(at indexPath: IndexPath) -> Object | |
func set(predicate: NSPredicate) | |
} | |
class AnyObjectsProvider<T>: ObjectsProvider { | |
let updates: Observable<[Update]> | |
init<OP: ObjectsProvider>(objectsProvider: OP) where OP.Object == T { | |
updates = objectsProvider.updates | |
_numberOfObjects = objectsProvider.numberOfObjects | |
_object = objectsProvider.object | |
_set = objectsProvider.set | |
} | |
... | |
} | |
class CoreDataObjectsProvider<CoreDataObject: Convertible>: NSObject, ObjectsProvider, NSFetchedResultsControllerDelegate where CoreDataObject: NSFetchRequestResult { | |
let updates: Observable<[Update]> | |
private let updatesBehaviorRelay = BehaviorRelay<[Update]>(value: []) | |
private let fetchedResultsController: NSFetchedResultsController<CoreDataObject> | |
private var updatesList: [Update] = [] | |
init(fetchedResultsController: NSFetchedResultsController<CoreDataObject>) { | |
self.fetchedResultsController = fetchedResultsController | |
try! fetchedResultsController.performFetch() | |
updates = updatesBehaviorRelay.asObservable() | |
super.init() | |
fetchedResultsController.delegate = self | |
} | |
... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment