Skip to content

Commit 95e49d0

Browse files
author
Roman Kyrylenko
committed
Merge branch 'feature/observable_changes' into 'master'
Feature/observable changes See merge request !3
2 parents 757f38a + 21808f6 commit 95e49d0

File tree

5 files changed

+11
-15
lines changed

5 files changed

+11
-15
lines changed

DBClient/Core/RequestObservable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Foundation
1616
public enum ObservableChange<T: Stored> {
1717

1818
case initial([T])
19-
case update(deletions: [Int], insertions: [(index: Int, element: T)], modifications: [(index: Int, element: T)])
19+
case change(objects: [T], deletions: [Int], insertions: [(index: Int, element: T)], modifications: [(index: Int, element: T)])
2020
case error(Error)
2121

2222
}

DBClient/CoreData/CoreDataObservable.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ class CoreDataObservable<T: Stored, U: NSManagedObject>: RequestObservable<T> {
6767
observer = closure
6868

6969
fetchedResultsControllerDelegate.observer = { [unowned self] change in
70-
if case .update(deletions: let deletions, insertions: let insertions, modifications: let modifications) = change {
70+
if case .change(objects: let objects, deletions: let deletions, insertions: let insertions, modifications: let modifications) = change {
7171
let mappedInsertions = insertions.map { ($0, coreDataModelType.from($1) as! T) }
7272
let mappedModifications = modifications.map { ($0, coreDataModelType.from($1) as! T) }
73-
74-
self.observer?(.update(deletions: deletions, insertions: mappedInsertions, modifications: mappedModifications))
73+
let mappedObjects = objects.map { coreDataModelType.from($0) as! T }
74+
self.observer?(.change(objects: mappedObjects, deletions: deletions, insertions: mappedInsertions, modifications: mappedModifications))
7575
}
7676
}
7777

@@ -112,7 +112,7 @@ private class FetchedResultsControllerDelegate<T: NSManagedObject>: NSObject, NS
112112
let inserted = batchChanges.filter { $0.isInsertion }.map { (index: $0.index(), element: $0.object()) }
113113
let updated = batchChanges.filter { $0.isUpdate }.map { (index: $0.index(), element: $0.object()) }
114114

115-
observer?(.update(deletions: deleted, insertions: inserted, modifications: updated))
115+
observer?(.change(objects: controller.fetchedObjects as? [T] ?? [], deletions: deleted, insertions: inserted, modifications: updated))
116116
batchChanges = []
117117
}
118118

DBClient/Realm/RealmObservable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class RealmObservable<T: Stored>: RequestObservable<T> {
4646
let mappedObjects = objects.map { realmModelType.from($0) as! T }
4747
let insertions = insertions.map { (index: $0, element: mappedObjects[$0]) }
4848
let modifications = modifications.map { (index: $0, element: mappedObjects[$0]) }
49-
closure(.update(deletions: deletions, insertions: insertions, modifications: modifications))
49+
closure(.change(objects: Array(mappedObjects), deletions: deletions, insertions: insertions, modifications: modifications))
5050

5151
case .error(let error):
5252
closure(.error(error))

Example/Example/MasterViewController.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,18 @@ class MasterViewController: UITableViewController, DBClientInjectable {
2626
self.objects.append(contentsOf: initial)
2727
self.tableView.reloadData()
2828

29-
case .update(deletions: let deletions, insertions: let insertions, modifications: let modifications):
29+
case .change(objects: let objects, deletions: let deletions, insertions: let insertions, modifications: let modifications):
30+
self.objects = objects
3031
self.tableView.beginUpdates()
3132

3233
let insertedIndexPaths = insertions.map { IndexPath(row: $0.index, section: 0) }
33-
insertions.forEach { index, object in self.objects.insert(object, at: index) }
3434
self.tableView.insertRows(at: insertedIndexPaths, with: .automatic)
3535

3636
let deletedIndexPaths = deletions.map { IndexPath(row: $0, section: 0) }
37-
deletions.forEach { self.objects.remove(at: $0) }
3837
self.tableView.deleteRows(at: deletedIndexPaths, with: .automatic)
3938

4039
let updatedIndexPaths = modifications.map { IndexPath(row: $0.index, section: 0) }
4140
self.tableView.reloadRows(at: updatedIndexPaths, with: .automatic)
42-
modifications.forEach { index, object in
43-
self.objects.insert(object, at: index)
44-
}
4541

4642
self.tableView.endUpdates()
4743

Example/Podfile.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ DEPENDENCIES:
1919

2020
EXTERNAL SOURCES:
2121
DBClient:
22-
:path: "../"
22+
:path: ../
2323

2424
SPEC CHECKSUMS:
2525
Bolts-Swift: fa98d1b59fc1acea9b21a21306dcdca1c85e3737
2626
DBClient: fcf29df338854a8509d00cad7356ab3190be4006
2727
Realm: efe855f4d977c8ce5a82d3116d9f1ff155a6550c
2828
RealmSwift: 17d6ee30b6f9df86364408c2197492e33bfea567
2929

30-
PODFILE CHECKSUM: cb4df083d69e58f50f893c10dae15238468392b4
30+
PODFILE CHECKSUM: 179eda0e5897e0216cdd26b5cd14adae089b4671
3131

32-
COCOAPODS: 1.2.0.beta.3
32+
COCOAPODS: 1.2.0.rc.1

0 commit comments

Comments
 (0)