Updates latest version of data sources.

This commit is contained in:
Krunoslav Zaher 2016-07-04 02:06:08 +02:00
parent e20ac5fbb7
commit 88f718ffc3
13 changed files with 386 additions and 144 deletions

View File

@ -29,6 +29,9 @@ public class RxCollectionViewSectionedAnimatedDataSource<S: AnimatableSectionMod
public func collectionView(collectionView: UICollectionView, observedEvent: Event<Element>) { public func collectionView(collectionView: UICollectionView, observedEvent: Event<Element>) {
UIBindingObserver(UIElement: self) { dataSource, newSections in UIBindingObserver(UIElement: self) { dataSource, newSections in
#if DEBUG
self._dataSourceBound = true
#endif
if !self.dataSet { if !self.dataSet {
self.dataSet = true self.dataSet = true
dataSource.setSections(newSections) dataSource.setSections(newSections)
@ -47,7 +50,10 @@ public class RxCollectionViewSectionedAnimatedDataSource<S: AnimatableSectionMod
} }
} }
catch let e { catch let e {
#if DEBUG
print("Error while binding data animated: \(e)\nFallback to normal `reloadData` behavior.")
rxDebugFatalError(e) rxDebugFatalError(e)
#endif
self.setSections(newSections) self.setSections(newSections)
collectionView.reloadData() collectionView.reloadData()
} }

View File

@ -25,6 +25,9 @@ public class RxCollectionViewSectionedReloadDataSource<S: SectionModelType>
public func collectionView(collectionView: UICollectionView, observedEvent: Event<Element>) { public func collectionView(collectionView: UICollectionView, observedEvent: Event<Element>) {
UIBindingObserver(UIElement: self) { dataSource, element in UIBindingObserver(UIElement: self) { dataSource, element in
#if DEBUG
self._dataSourceBound = true
#endif
dataSource.setSections(element) dataSource.setSections(element)
collectionView.reloadData() collectionView.reloadData()
}.on(observedEvent) }.on(observedEvent)

View File

@ -28,6 +28,9 @@ public class RxTableViewSectionedAnimatedDataSource<S: AnimatableSectionModelTyp
public func tableView(tableView: UITableView, observedEvent: Event<Element>) { public func tableView(tableView: UITableView, observedEvent: Event<Element>) {
UIBindingObserver(UIElement: self) { dataSource, newSections in UIBindingObserver(UIElement: self) { dataSource, newSections in
#if DEBUG
self._dataSourceBound = true
#endif
if !self.dataSet { if !self.dataSet {
self.dataSet = true self.dataSet = true
dataSource.setSections(newSections) dataSource.setSections(newSections)

View File

@ -24,6 +24,9 @@ public class RxTableViewSectionedReloadDataSource<S: SectionModelType>
public func tableView(tableView: UITableView, observedEvent: Event<Element>) { public func tableView(tableView: UITableView, observedEvent: Event<Element>) {
UIBindingObserver(UIElement: self) { dataSource, element in UIBindingObserver(UIElement: self) { dataSource, element in
#if DEBUG
self._dataSourceBound = true
#endif
dataSource.setSections(element) dataSource.setSections(element)
tableView.reloadData() tableView.reloadData()
}.on(observedEvent) }.on(observedEvent)

View File

@ -72,7 +72,19 @@ public class CollectionViewSectionedDataSource<S: SectionModelType>
public typealias Section = S public typealias Section = S
public typealias CellFactory = (CollectionViewSectionedDataSource<S>, UICollectionView, NSIndexPath, I) -> UICollectionViewCell public typealias CellFactory = (CollectionViewSectionedDataSource<S>, UICollectionView, NSIndexPath, I) -> UICollectionViewCell
public typealias SupplementaryViewFactory = (CollectionViewSectionedDataSource<S>, UICollectionView, String, NSIndexPath) -> UICollectionReusableView public typealias SupplementaryViewFactory = (CollectionViewSectionedDataSource<S>, UICollectionView, String, NSIndexPath) -> UICollectionReusableView
#if DEBUG
// If data source has already been bound, then mutating it
// afterwards isn't something desired.
// This simulates immutability after binding
var _dataSourceBound: Bool = false
private func ensureNotMutatedAfterBinding() {
assert(!_dataSourceBound, "Data source is already bound. Please write this line before binding call (`bindTo`, `drive`). Data source must first be completely configured, and then bound after that, otherwise there could be runtime bugs, glitches, or partial malfunctions.")
}
#endif
// This structure exists because model can be mutable // This structure exists because model can be mutable
// In that case current state value should be preserved. // In that case current state value should be preserved.
// The state that needs to be preserved is ordering of items in section // The state that needs to be preserved is ordering of items in section
@ -104,19 +116,54 @@ public class CollectionViewSectionedDataSource<S: SectionModelType>
self._sectionModels = sections.map { SectionModelSnapshot(model: $0, items: $0.items) } self._sectionModels = sections.map { SectionModelSnapshot(model: $0, items: $0.items) }
} }
public var cellFactory: CellFactory! = nil public var configureCell: CellFactory! = nil {
public var supplementaryViewFactory: SupplementaryViewFactory didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
@available(*, deprecated=0.8.1, renamed="configureCell")
public var cellFactory: CellFactory! {
get {
return self.configureCell
}
set {
self.configureCell = newValue
}
}
public var supplementaryViewFactory: SupplementaryViewFactory {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var moveItem: ((CollectionViewSectionedDataSource<S>, sourceIndexPath:NSIndexPath, destinationIndexPath:NSIndexPath) -> Void)? public var moveItem: ((CollectionViewSectionedDataSource<S>, sourceIndexPath:NSIndexPath, destinationIndexPath:NSIndexPath) -> Void)? {
public var canMoveItemAtIndexPath: ((CollectionViewSectionedDataSource<S>, indexPath:NSIndexPath) -> Bool)? didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var canMoveItemAtIndexPath: ((CollectionViewSectionedDataSource<S>, indexPath:NSIndexPath) -> Bool)? {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public override init() { public override init() {
self.cellFactory = {_, _, _, _ in return (nil as UICollectionViewCell?)! } self.configureCell = {_, _, _, _ in return (nil as UICollectionViewCell?)! }
self.supplementaryViewFactory = {_, _, _, _ in (nil as UICollectionReusableView?)! } self.supplementaryViewFactory = {_, _, _, _ in (nil as UICollectionReusableView?)! }
super.init() super.init()
self.cellFactory = { [weak self] _ in self.configureCell = { [weak self] _ in
precondition(false, "There is a minor problem. `cellFactory` property on \(self!) was not set. Please set it manually, or use one of the `rx_bindTo` methods.") precondition(false, "There is a minor problem. `cellFactory` property on \(self!) was not set. Please set it manually, or use one of the `rx_bindTo` methods.")
return (nil as UICollectionViewCell!)! return (nil as UICollectionViewCell!)!
@ -141,7 +188,7 @@ public class CollectionViewSectionedDataSource<S: SectionModelType>
override func _rx_collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { override func _rx_collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
precondition(indexPath.item < _sectionModels[indexPath.section].items.count) precondition(indexPath.item < _sectionModels[indexPath.section].items.count)
return cellFactory(self, collectionView, indexPath, itemAtIndexPath(indexPath)) return configureCell(self, collectionView, indexPath, itemAtIndexPath(indexPath))
} }
override func _rx_collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { override func _rx_collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

View File

@ -13,6 +13,7 @@ public enum DifferentiatorError
, CustomDebugStringConvertible { , CustomDebugStringConvertible {
case DuplicateItem(item: Any) case DuplicateItem(item: Any)
case DuplicateSection(section: Any) case DuplicateSection(section: Any)
case InvalidInitializerImplementation(section: Any, expectedItems: Any, expectedIdentifier: Any)
} }
extension DifferentiatorError { extension DifferentiatorError {
@ -22,6 +23,10 @@ extension DifferentiatorError {
return "Duplicate item \(item)" return "Duplicate item \(item)"
case let .DuplicateSection(section): case let .DuplicateSection(section):
return "Duplicate section \(section)" return "Duplicate section \(section)"
case let InvalidInitializerImplementation(section, expectedItems, expectedIdentifier):
return "Wrong initializer implementation for: \(section)\n" +
"Expected it should return items: \(expectedItems)\n" +
"Expected it should have id: \(expectedIdentifier)"
} }
} }
} }
@ -104,7 +109,9 @@ func indexSections<S: AnimatableSectionModelType>(sections: [S]) throws -> [S.Id
for (i, section) in sections.enumerate() { for (i, section) in sections.enumerate() {
guard indexedSections[section.identity] == nil else { guard indexedSections[section.identity] == nil else {
#if DEBUG #if DEBUG
precondition(indexedSections[section.identity] == nil, "Section \(section) has already been indexed at \(indexedSections[section.identity]!)") if indexedSections[section.identity] != nil {
print("Section \(section) has already been indexed at \(indexedSections[section.identity]!)")
}
#endif #endif
throw DifferentiatorError.DuplicateItem(item: section) throw DifferentiatorError.DuplicateItem(item: section)
} }
@ -127,7 +134,9 @@ func indexSectionItems<S: AnimatableSectionModelType>(sections: [S]) throws -> [
for (j, item) in sections[i].items.enumerate() { for (j, item) in sections[i].items.enumerate() {
guard indexedItems[item.identity] == nil else { guard indexedItems[item.identity] == nil else {
#if DEBUG #if DEBUG
precondition(indexedItems[item.identity] == nil, "Item \(item) has already been indexed at \(indexedItems[item.identity]!)" ) if indexedItems[item.identity] != nil {
print("Item \(item) has already been indexed at \(indexedItems[item.identity]!)" )
}
#endif #endif
throw DifferentiatorError.DuplicateItem(item: item) throw DifferentiatorError.DuplicateItem(item: item)
} }
@ -280,6 +289,16 @@ public func differencesForSectionedView<S: AnimatableSectionModelType>(
return result return result
} }
private extension AnimatableSectionModelType {
init(safeOriginal: Self, safeItems: [Item]) throws {
self.init(original: safeOriginal, items: safeItems)
if self.items != safeItems || self.identity != safeOriginal.identity {
throw DifferentiatorError.InvalidInitializerImplementation(section: self, expectedItems: safeItems, expectedIdentifier: safeOriginal.identity)
}
}
}
struct CommandGenerator<S: AnimatableSectionModelType> { struct CommandGenerator<S: AnimatableSectionModelType> {
let initialSections: [S] let initialSections: [S]
let finalSections: [S] let finalSections: [S]
@ -541,7 +560,7 @@ struct CommandGenerator<S: AnimatableSectionModelType> {
} }
} }
afterDeleteState.append(S(original: initialSection, items: afterDeleteItems)) afterDeleteState.append(try S(safeOriginal: initialSection, safeItems: afterDeleteItems))
} }
// } // }
@ -616,7 +635,9 @@ struct CommandGenerator<S: AnimatableSectionModelType> {
items.append(self.finalSections[finalIndex.sectionIndex].items[finalIndex.itemIndex]) items.append(self.finalSections[finalIndex.sectionIndex].items[finalIndex.itemIndex])
} }
return S(original: s, items: items) let modifiedSection = try S(safeOriginal: s, safeItems: items)
return modifiedSection
} }
else { else {
try rxPrecondition(false, "This is weird, this shouldn't happen") try rxPrecondition(false, "This is weird, this shouldn't happen")

View File

@ -0,0 +1,33 @@
//
// FloatingPointType+IdentifiableType.swift
// RxDataSources
//
// Created by Krunoslav Zaher on 7/4/16.
// Copyright © 2016 kzaher. All rights reserved.
//
import Foundation
extension FloatingPointType {
typealias identity = Self
public var identity: Self {
return self
}
}
extension Float : IdentifiableType {
}
extension Double : IdentifiableType {
}
extension Float80 : IdentifiableType {
typealias identity = Float80
public var identity: Float80 {
return self
}
}

View File

@ -0,0 +1,59 @@
//
// IntegerType+IdentifiableType.swift
// RxDataSources
//
// Created by Krunoslav Zaher on 7/4/16.
// Copyright © 2016 kzaher. All rights reserved.
//
import Foundation
extension IntegerType {
typealias identity = Self
public var identity: Self {
return self
}
}
extension Int : IdentifiableType {
}
extension Int8 : IdentifiableType {
}
extension Int16 : IdentifiableType {
}
extension Int32 : IdentifiableType {
}
extension Int64 : IdentifiableType {
}
extension UInt : IdentifiableType {
}
extension UInt8 : IdentifiableType {
}
extension UInt16 : IdentifiableType {
}
extension UInt32 : IdentifiableType {
}
extension UInt64 : IdentifiableType {
}

View File

@ -0,0 +1,17 @@
//
// String+IdentifiableType.swift
// RxDataSources
//
// Created by Krunoslav Zaher on 7/4/16.
// Copyright © 2016 kzaher. All rights reserved.
//
import Foundation
extension String : IdentifiableType {
public typealias Identity = String
public var identity: String {
return self
}
}

View File

@ -56,9 +56,9 @@ public class _TableViewSectionedDataSource
public func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? { public func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
return _rx_tableView(tableView, titleForFooterInSection: section) return _rx_tableView(tableView, titleForFooterInSection: section)
} }
func _rx_tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { func _rx_tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true return false
} }
public func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { public func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
@ -95,6 +95,7 @@ public class _TableViewSectionedDataSource
public func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) { public func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
_rx_tableView(tableView, moveRowAtIndexPath: sourceIndexPath, toIndexPath: destinationIndexPath) _rx_tableView(tableView, moveRowAtIndexPath: sourceIndexPath, toIndexPath: destinationIndexPath)
} }
} }
public class RxTableViewSectionedDataSource<S: SectionModelType> public class RxTableViewSectionedDataSource<S: SectionModelType>
@ -104,7 +105,19 @@ public class RxTableViewSectionedDataSource<S: SectionModelType>
public typealias I = S.Item public typealias I = S.Item
public typealias Section = S public typealias Section = S
public typealias CellFactory = (RxTableViewSectionedDataSource<S>, UITableView, NSIndexPath, I) -> UITableViewCell public typealias CellFactory = (RxTableViewSectionedDataSource<S>, UITableView, NSIndexPath, I) -> UITableViewCell
#if DEBUG
// If data source has already been bound, then mutating it
// afterwards isn't something desired.
// This simulates immutability after binding
var _dataSourceBound: Bool = false
private func ensureNotMutatedAfterBinding() {
assert(!_dataSourceBound, "Data source is already bound. Please write this line before binding call (`bindTo`, `drive`). Data source must first be completely configured, and then bound after that, otherwise there could be runtime bugs, glitches, or partial malfunctions.")
}
#endif
// This structure exists because model can be mutable // This structure exists because model can be mutable
// In that case current state value should be preserved. // In that case current state value should be preserved.
// The state that needs to be preserved is ordering of items in section // The state that needs to be preserved is ordering of items in section
@ -142,18 +155,59 @@ public class RxTableViewSectionedDataSource<S: SectionModelType>
self._sectionModels = sections.map { SectionModelSnapshot(model: $0, items: $0.items) } self._sectionModels = sections.map { SectionModelSnapshot(model: $0, items: $0.items) }
} }
public var configureCell: CellFactory! = nil public var configureCell: CellFactory! = nil {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var titleForHeaderInSection: ((RxTableViewSectionedDataSource<S>, section: Int) -> String?)? public var titleForHeaderInSection: ((RxTableViewSectionedDataSource<S>, section: Int) -> String?)? {
public var titleForFooterInSection: ((RxTableViewSectionedDataSource<S>, section: Int) -> String?)? didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var titleForFooterInSection: ((RxTableViewSectionedDataSource<S>, section: Int) -> String?)? {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var canEditRowAtIndexPath: ((RxTableViewSectionedDataSource<S>, indexPath: NSIndexPath) -> Bool)? public var canEditRowAtIndexPath: ((RxTableViewSectionedDataSource<S>, indexPath: NSIndexPath) -> Bool)? {
public var canMoveRowAtIndexPath: ((RxTableViewSectionedDataSource<S>, indexPath: NSIndexPath) -> Bool)? didSet {
#if DEBUG
public var sectionIndexTitles: ((RxTableViewSectionedDataSource<S>) -> [String]?)? ensureNotMutatedAfterBinding()
public var sectionForSectionIndexTitle:((RxTableViewSectionedDataSource<S>, title: String, index: Int) -> Int)? #endif
}
public var rowAnimation: UITableViewRowAnimation = .Automatic }
public var canMoveRowAtIndexPath: ((RxTableViewSectionedDataSource<S>, indexPath: NSIndexPath) -> Bool)? {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var sectionIndexTitles: ((RxTableViewSectionedDataSource<S>) -> [String]?)? {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public var sectionForSectionIndexTitle:((RxTableViewSectionedDataSource<S>, title: String, index: Int) -> Int)? {
didSet {
#if DEBUG
ensureNotMutatedAfterBinding()
#endif
}
}
public override init() { public override init() {
super.init() super.init()

View File

@ -36,6 +36,31 @@
C843A08E1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A08C1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift */; }; C843A08E1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A08C1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift */; };
C843A0901C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A08D1C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift */; }; C843A0901C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A08D1C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift */; };
C843A0931C1CE58700CBA4BD /* UINavigationController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A0921C1CE58700CBA4BD /* UINavigationController+Extensions.swift */; }; C843A0931C1CE58700CBA4BD /* UINavigationController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C843A0921C1CE58700CBA4BD /* UINavigationController+Extensions.swift */; };
C8477FEF1D29DE8C0074454A /* AnimatableSectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FD51D29DE8B0074454A /* AnimatableSectionModel.swift */; };
C8477FF01D29DE8C0074454A /* AnimatableSectionModelType+ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FD61D29DE8B0074454A /* AnimatableSectionModelType+ItemPath.swift */; };
C8477FF11D29DE8C0074454A /* AnimatableSectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FD71D29DE8B0074454A /* AnimatableSectionModelType.swift */; };
C8477FF21D29DE8C0074454A /* AnimationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FD81D29DE8B0074454A /* AnimationConfiguration.swift */; };
C8477FF31D29DE8C0074454A /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FD91D29DE8B0074454A /* Array+Extensions.swift */; };
C8477FF41D29DE8C0074454A /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDA1D29DE8B0074454A /* Changeset.swift */; };
C8477FF51D29DE8C0074454A /* CollectionViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDB1D29DE8B0074454A /* CollectionViewSectionedDataSource.swift */; };
C8477FF61D29DE8C0074454A /* DataSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDC1D29DE8B0074454A /* DataSources.swift */; };
C8477FF71D29DE8C0074454A /* Differentiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDD1D29DE8B0074454A /* Differentiator.swift */; };
C8477FF81D29DE8C0074454A /* FloatingPointType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDE1D29DE8C0074454A /* FloatingPointType+IdentifiableType.swift */; };
C8477FF91D29DE8C0074454A /* IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FDF1D29DE8C0074454A /* IdentifiableType.swift */; };
C8477FFA1D29DE8C0074454A /* IdentifiableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE01D29DE8C0074454A /* IdentifiableValue.swift */; };
C8477FFB1D29DE8C0074454A /* IntegerType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE11D29DE8C0074454A /* IntegerType+IdentifiableType.swift */; };
C8477FFC1D29DE8C0074454A /* ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE21D29DE8C0074454A /* ItemPath.swift */; };
C8477FFD1D29DE8C0074454A /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE31D29DE8C0074454A /* Optional+Extensions.swift */; };
C8477FFE1D29DE8C0074454A /* SectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE41D29DE8C0074454A /* SectionModel.swift */; };
C8477FFF1D29DE8C0074454A /* SectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE51D29DE8C0074454A /* SectionModelType.swift */; };
C84780001D29DE8C0074454A /* String+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE61D29DE8C0074454A /* String+IdentifiableType.swift */; };
C84780011D29DE8C0074454A /* TableViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE71D29DE8C0074454A /* TableViewSectionedDataSource.swift */; };
C84780021D29DE8C0074454A /* UI+SectionedViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FE81D29DE8C0074454A /* UI+SectionedViewType.swift */; };
C84780031D29DE8C0074454A /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FEA1D29DE8C0074454A /* RxCollectionViewSectionedAnimatedDataSource.swift */; };
C84780041D29DE8C0074454A /* RxCollectionViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FEB1D29DE8C0074454A /* RxCollectionViewSectionedReloadDataSource.swift */; };
C84780051D29DE8C0074454A /* RxTableViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FEC1D29DE8C0074454A /* RxTableViewSectionedAnimatedDataSource.swift */; };
C84780061D29DE8C0074454A /* RxTableViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FED1D29DE8C0074454A /* RxTableViewSectionedReloadDataSource.swift */; };
C84780071D29DE8C0074454A /* UISectionedViewType+RxAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8477FEE1D29DE8C0074454A /* UISectionedViewType+RxAnimatedDataSource.swift */; };
C849EF641C3190360048AC4A /* RxExample_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF631C3190360048AC4A /* RxExample_iOSTests.swift */; }; C849EF641C3190360048AC4A /* RxExample_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF631C3190360048AC4A /* RxExample_iOSTests.swift */; };
C849EF801C3193B10048AC4A /* GitHubSignupViewController1.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF7E1C3193B10048AC4A /* GitHubSignupViewController1.swift */; }; C849EF801C3193B10048AC4A /* GitHubSignupViewController1.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF7E1C3193B10048AC4A /* GitHubSignupViewController1.swift */; };
C849EF821C3193B10048AC4A /* GithubSignupViewModel1.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF7F1C3193B10048AC4A /* GithubSignupViewModel1.swift */; }; C849EF821C3193B10048AC4A /* GithubSignupViewModel1.swift in Sources */ = {isa = PBXBuildFile; fileRef = C849EF7F1C3193B10048AC4A /* GithubSignupViewModel1.swift */; };
@ -91,27 +116,6 @@
C8A468F11B8A8C2600BF917B /* RxBlocking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */; }; C8A468F11B8A8C2600BF917B /* RxBlocking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */; };
C8A468F21B8A8C2600BF917B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */; }; C8A468F21B8A8C2600BF917B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */; };
C8A468F31B8A8C2600BF917B /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EB1B8A8BC900BF917B /* RxSwift.framework */; }; C8A468F31B8A8C2600BF917B /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EB1B8A8BC900BF917B /* RxSwift.framework */; };
C8B290BF1C959D2900E923D0 /* AnimatableSectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290A71C959D2900E923D0 /* AnimatableSectionModel.swift */; };
C8B290C11C959D2900E923D0 /* AnimatableSectionModelType+ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290A81C959D2900E923D0 /* AnimatableSectionModelType+ItemPath.swift */; };
C8B290C31C959D2900E923D0 /* AnimatableSectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290A91C959D2900E923D0 /* AnimatableSectionModelType.swift */; };
C8B290C51C959D2900E923D0 /* AnimationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AA1C959D2900E923D0 /* AnimationConfiguration.swift */; };
C8B290C71C959D2900E923D0 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AB1C959D2900E923D0 /* Changeset.swift */; };
C8B290C91C959D2900E923D0 /* CollectionViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AC1C959D2900E923D0 /* CollectionViewSectionedDataSource.swift */; };
C8B290CB1C959D2900E923D0 /* DataSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AD1C959D2900E923D0 /* DataSources.swift */; };
C8B290CD1C959D2900E923D0 /* Differentiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AE1C959D2900E923D0 /* Differentiator.swift */; };
C8B290CF1C959D2900E923D0 /* IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290AF1C959D2900E923D0 /* IdentifiableType.swift */; };
C8B290D11C959D2900E923D0 /* IdentifiableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B01C959D2900E923D0 /* IdentifiableValue.swift */; };
C8B290D31C959D2900E923D0 /* ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B11C959D2900E923D0 /* ItemPath.swift */; };
C8B290D51C959D2900E923D0 /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B21C959D2900E923D0 /* Optional+Extensions.swift */; };
C8B290D71C959D2900E923D0 /* SectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B31C959D2900E923D0 /* SectionModel.swift */; };
C8B290D91C959D2900E923D0 /* SectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B41C959D2900E923D0 /* SectionModelType.swift */; };
C8B290DB1C959D2900E923D0 /* TableViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B51C959D2900E923D0 /* TableViewSectionedDataSource.swift */; };
C8B290DD1C959D2900E923D0 /* UI+SectionedViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B61C959D2900E923D0 /* UI+SectionedViewType.swift */; };
C8B290E11C959D2900E923D0 /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290B91C959D2900E923D0 /* RxCollectionViewSectionedAnimatedDataSource.swift */; };
C8B290E31C959D2900E923D0 /* RxCollectionViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290BA1C959D2900E923D0 /* RxCollectionViewSectionedReloadDataSource.swift */; };
C8B290E51C959D2900E923D0 /* RxTableViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290BB1C959D2900E923D0 /* RxTableViewSectionedAnimatedDataSource.swift */; };
C8B290E71C959D2900E923D0 /* RxTableViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290BC1C959D2900E923D0 /* RxTableViewSectionedReloadDataSource.swift */; };
C8B290E91C959D2900E923D0 /* UISectionedViewType+RxAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8B290BD1C959D2900E923D0 /* UISectionedViewType+RxAnimatedDataSource.swift */; };
C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DE1C1480E9005F1280 /* Operators.swift */; }; C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3DE1C1480E9005F1280 /* Operators.swift */; };
C8BCD3E31C14820B005F1280 /* IntroductionExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */; }; C8BCD3E31C14820B005F1280 /* IntroductionExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */; };
C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */; }; C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BCD3E51C14A95E005F1280 /* NumbersViewController.swift */; };
@ -131,7 +135,6 @@
C8DF92EA1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; }; C8DF92EA1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; };
C8DF92EB1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; }; C8DF92EB1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; };
C8E9D2AF1BD3FD960079D0DB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */; }; C8E9D2AF1BD3FD960079D0DB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80397391BD3E17D009D8B26 /* ActivityIndicator.swift */; };
C8EBA6031CD3E30C00E745F3 /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EBA6021CD3E30C00E745F3 /* Array+Extensions.swift */; };
C8F8C48A1C277F460047640B /* CalculatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C4891C277F460047640B /* CalculatorState.swift */; }; C8F8C48A1C277F460047640B /* CalculatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C4891C277F460047640B /* CalculatorState.swift */; };
C8F8C49D1C277F4F0047640B /* CalculatorAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C49C1C277F4F0047640B /* CalculatorAction.swift */; }; C8F8C49D1C277F4F0047640B /* CalculatorAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C49C1C277F4F0047640B /* CalculatorAction.swift */; };
C8F8C4A01C277F5A0047640B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C49F1C277F5A0047640B /* Operation.swift */; }; C8F8C4A01C277F5A0047640B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F8C49F1C277F5A0047640B /* Operation.swift */; };
@ -340,6 +343,31 @@
C843A08C1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitHubSearchRepositoriesAPI.swift; sourceTree = "<group>"; }; C843A08C1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitHubSearchRepositoriesAPI.swift; sourceTree = "<group>"; };
C843A08D1C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitHubSearchRepositoriesViewController.swift; sourceTree = "<group>"; }; C843A08D1C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GitHubSearchRepositoriesViewController.swift; sourceTree = "<group>"; };
C843A0921C1CE58700CBA4BD /* UINavigationController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationController+Extensions.swift"; sourceTree = "<group>"; }; C843A0921C1CE58700CBA4BD /* UINavigationController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationController+Extensions.swift"; sourceTree = "<group>"; };
C8477FD51D29DE8B0074454A /* AnimatableSectionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatableSectionModel.swift; sourceTree = "<group>"; };
C8477FD61D29DE8B0074454A /* AnimatableSectionModelType+ItemPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnimatableSectionModelType+ItemPath.swift"; sourceTree = "<group>"; };
C8477FD71D29DE8B0074454A /* AnimatableSectionModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatableSectionModelType.swift; sourceTree = "<group>"; };
C8477FD81D29DE8B0074454A /* AnimationConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimationConfiguration.swift; sourceTree = "<group>"; };
C8477FD91D29DE8B0074454A /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Extensions.swift"; sourceTree = "<group>"; };
C8477FDA1D29DE8B0074454A /* Changeset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Changeset.swift; sourceTree = "<group>"; };
C8477FDB1D29DE8B0074454A /* CollectionViewSectionedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewSectionedDataSource.swift; sourceTree = "<group>"; };
C8477FDC1D29DE8B0074454A /* DataSources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataSources.swift; sourceTree = "<group>"; };
C8477FDD1D29DE8B0074454A /* Differentiator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Differentiator.swift; sourceTree = "<group>"; };
C8477FDE1D29DE8C0074454A /* FloatingPointType+IdentifiableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FloatingPointType+IdentifiableType.swift"; sourceTree = "<group>"; };
C8477FDF1D29DE8C0074454A /* IdentifiableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiableType.swift; sourceTree = "<group>"; };
C8477FE01D29DE8C0074454A /* IdentifiableValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiableValue.swift; sourceTree = "<group>"; };
C8477FE11D29DE8C0074454A /* IntegerType+IdentifiableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IntegerType+IdentifiableType.swift"; sourceTree = "<group>"; };
C8477FE21D29DE8C0074454A /* ItemPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemPath.swift; sourceTree = "<group>"; };
C8477FE31D29DE8C0074454A /* Optional+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Optional+Extensions.swift"; sourceTree = "<group>"; };
C8477FE41D29DE8C0074454A /* SectionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionModel.swift; sourceTree = "<group>"; };
C8477FE51D29DE8C0074454A /* SectionModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionModelType.swift; sourceTree = "<group>"; };
C8477FE61D29DE8C0074454A /* String+IdentifiableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+IdentifiableType.swift"; sourceTree = "<group>"; };
C8477FE71D29DE8C0074454A /* TableViewSectionedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewSectionedDataSource.swift; sourceTree = "<group>"; };
C8477FE81D29DE8C0074454A /* UI+SectionedViewType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UI+SectionedViewType.swift"; sourceTree = "<group>"; };
C8477FEA1D29DE8C0074454A /* RxCollectionViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCollectionViewSectionedAnimatedDataSource.swift; sourceTree = "<group>"; };
C8477FEB1D29DE8C0074454A /* RxCollectionViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCollectionViewSectionedReloadDataSource.swift; sourceTree = "<group>"; };
C8477FEC1D29DE8C0074454A /* RxTableViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTableViewSectionedAnimatedDataSource.swift; sourceTree = "<group>"; };
C8477FED1D29DE8C0074454A /* RxTableViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTableViewSectionedReloadDataSource.swift; sourceTree = "<group>"; };
C8477FEE1D29DE8C0074454A /* UISectionedViewType+RxAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISectionedViewType+RxAnimatedDataSource.swift"; sourceTree = "<group>"; };
C849EF611C3190360048AC4A /* RxExample-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RxExample-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C849EF611C3190360048AC4A /* RxExample-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RxExample-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
C849EF631C3190360048AC4A /* RxExample_iOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxExample_iOSTests.swift; sourceTree = "<group>"; }; C849EF631C3190360048AC4A /* RxExample_iOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxExample_iOSTests.swift; sourceTree = "<group>"; };
C849EF651C3190360048AC4A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; C849EF651C3190360048AC4A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -372,27 +400,6 @@
C8A468EB1B8A8BC900BF917B /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A468EB1B8A8BC900BF917B /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8B290A71C959D2900E923D0 /* AnimatableSectionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatableSectionModel.swift; sourceTree = "<group>"; };
C8B290A81C959D2900E923D0 /* AnimatableSectionModelType+ItemPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AnimatableSectionModelType+ItemPath.swift"; sourceTree = "<group>"; };
C8B290A91C959D2900E923D0 /* AnimatableSectionModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatableSectionModelType.swift; sourceTree = "<group>"; };
C8B290AA1C959D2900E923D0 /* AnimationConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimationConfiguration.swift; sourceTree = "<group>"; };
C8B290AB1C959D2900E923D0 /* Changeset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Changeset.swift; sourceTree = "<group>"; };
C8B290AC1C959D2900E923D0 /* CollectionViewSectionedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewSectionedDataSource.swift; sourceTree = "<group>"; };
C8B290AD1C959D2900E923D0 /* DataSources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataSources.swift; sourceTree = "<group>"; };
C8B290AE1C959D2900E923D0 /* Differentiator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Differentiator.swift; sourceTree = "<group>"; };
C8B290AF1C959D2900E923D0 /* IdentifiableType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiableType.swift; sourceTree = "<group>"; };
C8B290B01C959D2900E923D0 /* IdentifiableValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiableValue.swift; sourceTree = "<group>"; };
C8B290B11C959D2900E923D0 /* ItemPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemPath.swift; sourceTree = "<group>"; };
C8B290B21C959D2900E923D0 /* Optional+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Optional+Extensions.swift"; sourceTree = "<group>"; };
C8B290B31C959D2900E923D0 /* SectionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionModel.swift; sourceTree = "<group>"; };
C8B290B41C959D2900E923D0 /* SectionModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionModelType.swift; sourceTree = "<group>"; };
C8B290B51C959D2900E923D0 /* TableViewSectionedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewSectionedDataSource.swift; sourceTree = "<group>"; };
C8B290B61C959D2900E923D0 /* UI+SectionedViewType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UI+SectionedViewType.swift"; sourceTree = "<group>"; };
C8B290B91C959D2900E923D0 /* RxCollectionViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCollectionViewSectionedAnimatedDataSource.swift; sourceTree = "<group>"; };
C8B290BA1C959D2900E923D0 /* RxCollectionViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxCollectionViewSectionedReloadDataSource.swift; sourceTree = "<group>"; };
C8B290BB1C959D2900E923D0 /* RxTableViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTableViewSectionedAnimatedDataSource.swift; sourceTree = "<group>"; };
C8B290BC1C959D2900E923D0 /* RxTableViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTableViewSectionedReloadDataSource.swift; sourceTree = "<group>"; };
C8B290BD1C959D2900E923D0 /* UISectionedViewType+RxAnimatedDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISectionedViewType+RxAnimatedDataSource.swift"; sourceTree = "<group>"; };
C8B290BE1C959D2900E923D0 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; C8B290BE1C959D2900E923D0 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
C8BCD3DE1C1480E9005F1280 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = "<group>"; }; C8BCD3DE1C1480E9005F1280 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = "<group>"; };
C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntroductionExampleViewController.swift; sourceTree = "<group>"; }; C8BCD3E21C14820B005F1280 /* IntroductionExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntroductionExampleViewController.swift; sourceTree = "<group>"; };
@ -413,7 +420,6 @@
C8DF92E91B0B38C0009BCF9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; C8DF92E91B0B38C0009BCF9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
C8DF92F01B0B3E67009BCF9A /* Info-OSX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-OSX.plist"; sourceTree = "<group>"; }; C8DF92F01B0B3E67009BCF9A /* Info-OSX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-OSX.plist"; sourceTree = "<group>"; };
C8DF92F21B0B3E71009BCF9A /* Info-iOS.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = "<group>"; }; C8DF92F21B0B3E71009BCF9A /* Info-iOS.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = "<group>"; };
C8EBA6021CD3E30C00E745F3 /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Extensions.swift"; sourceTree = "<group>"; };
C8F8C4891C277F460047640B /* CalculatorState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorState.swift; sourceTree = "<group>"; }; C8F8C4891C277F460047640B /* CalculatorState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorState.swift; sourceTree = "<group>"; };
C8F8C49C1C277F4F0047640B /* CalculatorAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorAction.swift; sourceTree = "<group>"; }; C8F8C49C1C277F4F0047640B /* CalculatorAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorAction.swift; sourceTree = "<group>"; };
C8F8C49F1C277F5A0047640B /* Operation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = "<group>"; }; C8F8C49F1C277F5A0047640B /* Operation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = "<group>"; };
@ -612,6 +618,45 @@
path = GitHubSearchRepositories; path = GitHubSearchRepositories;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
C8477FD41D29DE8B0074454A /* DataSources */ = {
isa = PBXGroup;
children = (
C8477FD51D29DE8B0074454A /* AnimatableSectionModel.swift */,
C8477FD61D29DE8B0074454A /* AnimatableSectionModelType+ItemPath.swift */,
C8477FD71D29DE8B0074454A /* AnimatableSectionModelType.swift */,
C8477FD81D29DE8B0074454A /* AnimationConfiguration.swift */,
C8477FD91D29DE8B0074454A /* Array+Extensions.swift */,
C8477FDA1D29DE8B0074454A /* Changeset.swift */,
C8477FDB1D29DE8B0074454A /* CollectionViewSectionedDataSource.swift */,
C8477FDC1D29DE8B0074454A /* DataSources.swift */,
C8477FDD1D29DE8B0074454A /* Differentiator.swift */,
C8477FDE1D29DE8C0074454A /* FloatingPointType+IdentifiableType.swift */,
C8477FDF1D29DE8C0074454A /* IdentifiableType.swift */,
C8477FE01D29DE8C0074454A /* IdentifiableValue.swift */,
C8477FE11D29DE8C0074454A /* IntegerType+IdentifiableType.swift */,
C8477FE21D29DE8C0074454A /* ItemPath.swift */,
C8477FE31D29DE8C0074454A /* Optional+Extensions.swift */,
C8477FE41D29DE8C0074454A /* SectionModel.swift */,
C8477FE51D29DE8C0074454A /* SectionModelType.swift */,
C8477FE61D29DE8C0074454A /* String+IdentifiableType.swift */,
C8477FE71D29DE8C0074454A /* TableViewSectionedDataSource.swift */,
C8477FE81D29DE8C0074454A /* UI+SectionedViewType.swift */,
);
path = DataSources;
sourceTree = "<group>";
};
C8477FE91D29DE8C0074454A /* DataSources+Rx */ = {
isa = PBXGroup;
children = (
C8477FEA1D29DE8C0074454A /* RxCollectionViewSectionedAnimatedDataSource.swift */,
C8477FEB1D29DE8C0074454A /* RxCollectionViewSectionedReloadDataSource.swift */,
C8477FEC1D29DE8C0074454A /* RxTableViewSectionedAnimatedDataSource.swift */,
C8477FED1D29DE8C0074454A /* RxTableViewSectionedReloadDataSource.swift */,
C8477FEE1D29DE8C0074454A /* UISectionedViewType+RxAnimatedDataSource.swift */,
);
path = "DataSources+Rx";
sourceTree = "<group>";
};
C849EF621C3190360048AC4A /* RxExample-iOSTests */ = { C849EF621C3190360048AC4A /* RxExample-iOSTests */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -752,49 +797,13 @@
C8B290A51C959D2900E923D0 /* RxDataSources */ = { C8B290A51C959D2900E923D0 /* RxDataSources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C8B290A61C959D2900E923D0 /* DataSources */, C8477FD41D29DE8B0074454A /* DataSources */,
C8B290B71C959D2900E923D0 /* DataSources+Rx */, C8477FE91D29DE8C0074454A /* DataSources+Rx */,
C8B290BE1C959D2900E923D0 /* README.md */, C8B290BE1C959D2900E923D0 /* README.md */,
); );
path = RxDataSources; path = RxDataSources;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
C8B290A61C959D2900E923D0 /* DataSources */ = {
isa = PBXGroup;
children = (
C8EBA6021CD3E30C00E745F3 /* Array+Extensions.swift */,
C8B290A71C959D2900E923D0 /* AnimatableSectionModel.swift */,
C8B290A81C959D2900E923D0 /* AnimatableSectionModelType+ItemPath.swift */,
C8B290A91C959D2900E923D0 /* AnimatableSectionModelType.swift */,
C8B290AA1C959D2900E923D0 /* AnimationConfiguration.swift */,
C8B290AB1C959D2900E923D0 /* Changeset.swift */,
C8B290AC1C959D2900E923D0 /* CollectionViewSectionedDataSource.swift */,
C8B290AD1C959D2900E923D0 /* DataSources.swift */,
C8B290AE1C959D2900E923D0 /* Differentiator.swift */,
C8B290AF1C959D2900E923D0 /* IdentifiableType.swift */,
C8B290B01C959D2900E923D0 /* IdentifiableValue.swift */,
C8B290B11C959D2900E923D0 /* ItemPath.swift */,
C8B290B21C959D2900E923D0 /* Optional+Extensions.swift */,
C8B290B31C959D2900E923D0 /* SectionModel.swift */,
C8B290B41C959D2900E923D0 /* SectionModelType.swift */,
C8B290B51C959D2900E923D0 /* TableViewSectionedDataSource.swift */,
C8B290B61C959D2900E923D0 /* UI+SectionedViewType.swift */,
);
path = DataSources;
sourceTree = "<group>";
};
C8B290B71C959D2900E923D0 /* DataSources+Rx */ = {
isa = PBXGroup;
children = (
C8B290B91C959D2900E923D0 /* RxCollectionViewSectionedAnimatedDataSource.swift */,
C8B290BA1C959D2900E923D0 /* RxCollectionViewSectionedReloadDataSource.swift */,
C8B290BB1C959D2900E923D0 /* RxTableViewSectionedAnimatedDataSource.swift */,
C8B290BC1C959D2900E923D0 /* RxTableViewSectionedReloadDataSource.swift */,
C8B290BD1C959D2900E923D0 /* UISectionedViewType+RxAnimatedDataSource.swift */,
);
path = "DataSources+Rx";
sourceTree = "<group>";
};
C8BCD3E11C14820B005F1280 /* OSX simple example */ = { C8BCD3E11C14820B005F1280 /* OSX simple example */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -1120,84 +1129,87 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
C8B290C51C959D2900E923D0 /* AnimationConfiguration.swift in Sources */,
0744CDD41C4DB5F000720FD2 /* GeolocationService.swift in Sources */, 0744CDD41C4DB5F000720FD2 /* GeolocationService.swift in Sources */,
C84780021D29DE8C0074454A /* UI+SectionedViewType.swift in Sources */,
B1604CC91BE5BBFA002E1279 /* UIImageView+DownloadableImage.swift in Sources */, B1604CC91BE5BBFA002E1279 /* UIImageView+DownloadableImage.swift in Sources */,
C84780041D29DE8C0074454A /* RxCollectionViewSectionedReloadDataSource.swift in Sources */,
C8477FF91D29DE8C0074454A /* IdentifiableType.swift in Sources */,
C86E2F3E1AE5A0CA00C31024 /* SearchResultViewModel.swift in Sources */, C86E2F3E1AE5A0CA00C31024 /* SearchResultViewModel.swift in Sources */,
C83367241AD029AE00C668A7 /* HtmlParsing.swift in Sources */, C83367241AD029AE00C668A7 /* HtmlParsing.swift in Sources */,
C8F8C48A1C277F460047640B /* CalculatorState.swift in Sources */, C8F8C48A1C277F460047640B /* CalculatorState.swift in Sources */,
C8477FF31D29DE8C0074454A /* Array+Extensions.swift in Sources */,
C843A08E1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift in Sources */, C843A08E1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift in Sources */,
C84780011D29DE8C0074454A /* TableViewSectionedDataSource.swift in Sources */,
C849EF801C3193B10048AC4A /* GitHubSignupViewController1.swift in Sources */, C849EF801C3193B10048AC4A /* GitHubSignupViewController1.swift in Sources */,
C8DF92E51B0B32DA009BCF9A /* RootViewController.swift in Sources */, C8DF92E51B0B32DA009BCF9A /* RootViewController.swift in Sources */,
C822B1DC1C14CD1C0088A01A /* DefaultImplementations.swift in Sources */, C822B1DC1C14CD1C0088A01A /* DefaultImplementations.swift in Sources */,
C8B290CB1C959D2900E923D0 /* DataSources.swift in Sources */, C8477FFE1D29DE8C0074454A /* SectionModel.swift in Sources */,
C8477FFC1D29DE8C0074454A /* ItemPath.swift in Sources */,
C84780031D29DE8C0074454A /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */,
C8477FF61D29DE8C0074454A /* DataSources.swift in Sources */,
C8C46DA81B47F7110020D71E /* CollectionViewImageCell.swift in Sources */, C8C46DA81B47F7110020D71E /* CollectionViewImageCell.swift in Sources */,
C8984CD31C36BC3E001E4272 /* NumberSectionView.swift in Sources */, C8984CD31C36BC3E001E4272 /* NumberSectionView.swift in Sources */,
C822B1E31C14E4810088A01A /* SimpleTableViewExampleViewController.swift in Sources */, C822B1E31C14E4810088A01A /* SimpleTableViewExampleViewController.swift in Sources */,
C8477FF81D29DE8C0074454A /* FloatingPointType+IdentifiableType.swift in Sources */,
C8C46DAC1B47F7110020D71E /* WikipediaSearchViewController.swift in Sources */, C8C46DAC1B47F7110020D71E /* WikipediaSearchViewController.swift in Sources */,
C8B290C11C959D2900E923D0 /* AnimatableSectionModelType+ItemPath.swift in Sources */,
07A5C3DB1B70B703001EFE5C /* CalculatorViewController.swift in Sources */, 07A5C3DB1B70B703001EFE5C /* CalculatorViewController.swift in Sources */,
C849EF861C3195180048AC4A /* GitHubSignupViewController2.swift in Sources */, C849EF861C3195180048AC4A /* GitHubSignupViewController2.swift in Sources */,
C8477FF11D29DE8C0074454A /* AnimatableSectionModelType.swift in Sources */,
C8F8C49D1C277F4F0047640B /* CalculatorAction.swift in Sources */, C8F8C49D1C277F4F0047640B /* CalculatorAction.swift in Sources */,
C8B290D51C959D2900E923D0 /* Optional+Extensions.swift in Sources */,
C8B290D91C959D2900E923D0 /* SectionModelType.swift in Sources */,
C864BAD71C3332F10083833C /* DetailViewController.swift in Sources */, C864BAD71C3332F10083833C /* DetailViewController.swift in Sources */,
C8B290C31C959D2900E923D0 /* AnimatableSectionModelType.swift in Sources */,
C822B1DF1C14CEAA0088A01A /* BindingExtensions.swift in Sources */, C822B1DF1C14CEAA0088A01A /* BindingExtensions.swift in Sources */,
C864BAD91C3332F10083833C /* RandomUserAPI.swift in Sources */, C864BAD91C3332F10083833C /* RandomUserAPI.swift in Sources */,
C8B290E51C959D2900E923D0 /* RxTableViewSectionedAnimatedDataSource.swift in Sources */, C8477FF01D29DE8C0074454A /* AnimatableSectionModelType+ItemPath.swift in Sources */,
C864BADF1C3332F10083833C /* UIImageView+Extensions.swift in Sources */, C864BADF1C3332F10083833C /* UIImageView+Extensions.swift in Sources */,
C8477FFD1D29DE8C0074454A /* Optional+Extensions.swift in Sources */,
C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */, C8BCD3DF1C1480E9005F1280 /* Operators.swift in Sources */,
C84780061D29DE8C0074454A /* RxTableViewSectionedReloadDataSource.swift in Sources */,
C843A0901C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift in Sources */, C843A0901C1CE39900CBA4BD /* GitHubSearchRepositoriesViewController.swift in Sources */,
C803973A1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */, C803973A1BD3E17D009D8B26 /* ActivityIndicator.swift in Sources */,
C849EF821C3193B10048AC4A /* GithubSignupViewModel1.swift in Sources */, C849EF821C3193B10048AC4A /* GithubSignupViewModel1.swift in Sources */,
C864BADD1C3332F10083833C /* TableViewWithEditingCommandsViewController.swift in Sources */, C864BADD1C3332F10083833C /* TableViewWithEditingCommandsViewController.swift in Sources */,
C8F8C4A01C277F5A0047640B /* Operation.swift in Sources */, C8F8C4A01C277F5A0047640B /* Operation.swift in Sources */,
C8477FEF1D29DE8C0074454A /* AnimatableSectionModel.swift in Sources */,
C822B1D91C14CBEA0088A01A /* Protocols.swift in Sources */, C822B1D91C14CBEA0088A01A /* Protocols.swift in Sources */,
C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */, C8BCD3E61C14A95E005F1280 /* NumbersViewController.swift in Sources */,
C8B290D71C959D2900E923D0 /* SectionModel.swift in Sources */,
C849EF881C3195180048AC4A /* GithubSignupViewModel2.swift in Sources */, C849EF881C3195180048AC4A /* GithubSignupViewModel2.swift in Sources */,
C8B290BF1C959D2900E923D0 /* AnimatableSectionModel.swift in Sources */,
C809E97A1BE6841C0058D948 /* Wireframe.swift in Sources */, C809E97A1BE6841C0058D948 /* Wireframe.swift in Sources */,
C8B290C71C959D2900E923D0 /* Changeset.swift in Sources */, C8477FF41D29DE8C0074454A /* Changeset.swift in Sources */,
C843A0931C1CE58700CBA4BD /* UINavigationController+Extensions.swift in Sources */, C843A0931C1CE58700CBA4BD /* UINavigationController+Extensions.swift in Sources */,
C822B1E71C14E7250088A01A /* SimpleTableViewExampleSectionedViewController.swift in Sources */, C822B1E71C14E7250088A01A /* SimpleTableViewExampleSectionedViewController.swift in Sources */,
C83367251AD029AE00C668A7 /* ImageService.swift in Sources */, C83367251AD029AE00C668A7 /* ImageService.swift in Sources */,
C84780001D29DE8C0074454A /* String+IdentifiableType.swift in Sources */,
C86E2F471AE5A0CA00C31024 /* WikipediaSearchResult.swift in Sources */, C86E2F471AE5A0CA00C31024 /* WikipediaSearchResult.swift in Sources */,
C8984CD11C36BC3E001E4272 /* NumberCell.swift in Sources */, C8984CD11C36BC3E001E4272 /* NumberCell.swift in Sources */,
C8B290DD1C959D2900E923D0 /* UI+SectionedViewType.swift in Sources */,
C8A2A2C81B4049E300F11F09 /* PseudoRandomGenerator.swift in Sources */, C8A2A2C81B4049E300F11F09 /* PseudoRandomGenerator.swift in Sources */,
C8B290E31C959D2900E923D0 /* RxCollectionViewSectionedReloadDataSource.swift in Sources */,
C8B290CD1C959D2900E923D0 /* Differentiator.swift in Sources */,
C8D132151C42B54B00B59FFF /* UIImagePickerController+RxCreate.swift in Sources */, C8D132151C42B54B00B59FFF /* UIImagePickerController+RxCreate.swift in Sources */,
C8477FF71D29DE8C0074454A /* Differentiator.swift in Sources */,
C8984CD51C36BC3E001E4272 /* PartialUpdatesViewController.swift in Sources */, C8984CD51C36BC3E001E4272 /* PartialUpdatesViewController.swift in Sources */,
8479BC721C3BDAD400FB8B54 /* ImagePickerController.swift in Sources */, 8479BC721C3BDAD400FB8B54 /* ImagePickerController.swift in Sources */,
C8477FFF1D29DE8C0074454A /* SectionModelType.swift in Sources */,
C864BAE11C3332F10083833C /* User.swift in Sources */, C864BAE11C3332F10083833C /* User.swift in Sources */,
0744CDED1C4DB78600720FD2 /* GeolocationViewController.swift in Sources */, 0744CDED1C4DB78600720FD2 /* GeolocationViewController.swift in Sources */,
C8B290D31C959D2900E923D0 /* ItemPath.swift in Sources */,
C8B290DB1C959D2900E923D0 /* TableViewSectionedDataSource.swift in Sources */,
C83367231AD029AE00C668A7 /* Example.swift in Sources */, C83367231AD029AE00C668A7 /* Example.swift in Sources */,
C8B290D11C959D2900E923D0 /* IdentifiableValue.swift in Sources */,
C8B290E11C959D2900E923D0 /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */,
C8B290E91C959D2900E923D0 /* UISectionedViewType+RxAnimatedDataSource.swift in Sources */,
C890A65D1AEC084100AFF7E6 /* ViewController.swift in Sources */, C890A65D1AEC084100AFF7E6 /* ViewController.swift in Sources */,
C8EBA6031CD3E30C00E745F3 /* Array+Extensions.swift in Sources */, C8477FFB1D29DE8C0074454A /* IntegerType+IdentifiableType.swift in Sources */,
C8C46DAA1B47F7110020D71E /* WikipediaSearchCell.swift in Sources */, C8C46DAA1B47F7110020D71E /* WikipediaSearchCell.swift in Sources */,
C8B290C91C959D2900E923D0 /* CollectionViewSectionedDataSource.swift in Sources */,
B1604CB51BE49F8D002E1279 /* DownloadableImage.swift in Sources */, B1604CB51BE49F8D002E1279 /* DownloadableImage.swift in Sources */,
C8477FF51D29DE8C0074454A /* CollectionViewSectionedDataSource.swift in Sources */,
075F13101B4E9D5A000D7861 /* APIWrappersViewController.swift in Sources */, 075F13101B4E9D5A000D7861 /* APIWrappersViewController.swift in Sources */,
C84780051D29DE8C0074454A /* RxTableViewSectionedAnimatedDataSource.swift in Sources */,
B18F3BE21BDB2E8F000AAC79 /* ReachabilityService.swift in Sources */, B18F3BE21BDB2E8F000AAC79 /* ReachabilityService.swift in Sources */,
B18F3BBC1BD92EC8000AAC79 /* Reachability.swift in Sources */, B18F3BBC1BD92EC8000AAC79 /* Reachability.swift in Sources */,
07E3C2331B03605B0010338D /* Dependencies.swift in Sources */, 07E3C2331B03605B0010338D /* Dependencies.swift in Sources */,
C8477FFA1D29DE8C0074454A /* IdentifiableValue.swift in Sources */,
C849EF9C1C31A8750048AC4A /* String+URL.swift in Sources */, C849EF9C1C31A8750048AC4A /* String+URL.swift in Sources */,
C86E2F451AE5A0CA00C31024 /* WikipediaAPI.swift in Sources */, C86E2F451AE5A0CA00C31024 /* WikipediaAPI.swift in Sources */,
C8DF92CD1B0B2F84009BCF9A /* AppDelegate.swift in Sources */, C8DF92CD1B0B2F84009BCF9A /* AppDelegate.swift in Sources */,
C8477FF21D29DE8C0074454A /* AnimationConfiguration.swift in Sources */,
C86E2F461AE5A0CA00C31024 /* WikipediaPage.swift in Sources */, C86E2F461AE5A0CA00C31024 /* WikipediaPage.swift in Sources */,
C8B290E71C959D2900E923D0 /* RxTableViewSectionedReloadDataSource.swift in Sources */,
C809E97D1BE697100058D948 /* UIImage+Extensions.swift in Sources */, C809E97D1BE697100058D948 /* UIImage+Extensions.swift in Sources */,
C8B290CF1C959D2900E923D0 /* IdentifiableType.swift in Sources */,
C8A2A2CB1B404A1200F11F09 /* Randomizer.swift in Sources */, C8A2A2CB1B404A1200F11F09 /* Randomizer.swift in Sources */,
C8BCD3EA1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */, C8BCD3EA1C14B02A005F1280 /* SimpleValidationViewController.swift in Sources */,
C84780071D29DE8C0074454A /* UISectionedViewType+RxAnimatedDataSource.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -151,7 +151,7 @@ class PartialUpdatesViewController : ViewController {
} }
func skinCollectionViewDataSource(dataSource: CollectionViewSectionedDataSource<NumberSection>) { func skinCollectionViewDataSource(dataSource: CollectionViewSectionedDataSource<NumberSection>) {
dataSource.cellFactory = { (_, cv, ip, i) in dataSource.configureCell = { (_, cv, ip, i) in
let cell = cv.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: ip) as! NumberCell let cell = cv.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: ip) as! NumberCell
cell.value!.text = "\(i)" cell.value!.text = "\(i)"

View File

@ -10,22 +10,6 @@ import Foundation
typealias NumberSection = AnimatableSectionModel<String, Int> typealias NumberSection = AnimatableSectionModel<String, Int>
extension String : IdentifiableType {
public typealias Identity = String
public var identity: String {
return self
}
}
extension Int : IdentifiableType {
public typealias Identity = Int
public var identity: Int {
return self
}
}
let insertItems = true let insertItems = true
let deleteItems = true let deleteItems = true
let moveItems = true let moveItems = true