WIP: ObjectRepresentable utilities

This commit is contained in:
John Estropia
2019-10-14 21:36:03 +09:00
parent f5a165d47d
commit 6b64eb7650
17 changed files with 315 additions and 198 deletions

View File

@@ -136,14 +136,15 @@ class ListObserverDemoViewController: UITableViewController {
return cell
}
)
ColorsDemo.palettes.addObserver(self) { [weak self] (liveList, snapshot) in
ColorsDemo.palettes.addObserver(self) { [weak self] (liveList) in
guard let self = self else {
return
}
self.dataSource?.apply(snapshot, animatingDifferences: true)
self.dataSource?.apply(liveList.snapshot, animatingDifferences: true)
}
self.dataSource?.apply(ColorsDemo.palettes.snapshot, animatingDifferences: false)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
@@ -152,8 +153,8 @@ class ListObserverDemoViewController: UITableViewController {
switch (segue.identifier, segue.destination, sender) {
case ("ObjectObserverDemoViewController"?, let destinationViewController as ObjectObserverDemoViewController, let palette as Palette):
destinationViewController.palette = palette
case ("ObjectObserverDemoViewController"?, let destinationViewController as ObjectObserverDemoViewController, let palette as LiveObject<Palette>):
destinationViewController.setPalette(palette)
default:
break
@@ -169,7 +170,7 @@ class ListObserverDemoViewController: UITableViewController {
self.performSegue(
withIdentifier: "ObjectObserverDemoViewController",
sender: ColorsDemo.palettes[indexPath: indexPath]?.object
sender: ColorsDemo.palettes[indexPath: indexPath]
)
}

View File

@@ -14,30 +14,23 @@ import CoreStore
class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
var palette: Palette? {
func setPalette<O: ObjectRepresentation>(_ newValue: O?) where O.ObjectType == Palette {
get {
guard self.monitor?.cs_id() != newValue?.cs_id() else {
return self.monitor?.object
return
}
set {
if let newValue = newValue {
guard self.monitor?.object != newValue else {
return
}
self.monitor = ColorsDemo.stack.monitorObject(newValue)
}
else {
if let palette = newValue {
self.monitor = ColorsDemo.stack.monitorObject(palette)
}
else {
self.monitor = nil
}
self.monitor = nil
}
}
// MARK: NSObject
deinit {