From 75d042a6712837c82677d24cffc86661b19bfe83 Mon Sep 17 00:00:00 2001 From: Jesse Squires Date: Fri, 6 Jul 2018 12:25:13 -0700 Subject: [PATCH] [Docs] Gen docs for 0.1.1 --- docs/Classes.html | 38 ++-- docs/Classes/CollectionViewDriver.html | 36 ++-- docs/Classes/TableViewDriver.html | 76 ++++++- .../TableViewDriver/TableRefreshContext.html | 15 +- docs/Enums.html | 42 ++-- docs/Enums/SupplementaryViewKind.html | 13 +- docs/Enums/ViewRegistrationMethod.html | 11 +- docs/Guides.html | 8 +- docs/Protocols.html | 152 ++++++++------ docs/Protocols/CollectionCellViewModel.html | 33 ++-- .../CollectionSupplementaryViewModel.html | 21 +- docs/Protocols/DiffableViewModel.html | 13 +- docs/Protocols/ReusableCellProtocol.html | 187 ++++++++++++++++++ .../ReusableCellViewModelProtocol.html | 13 +- ...eusableSupplementaryViewModelProtocol.html | 13 +- docs/Protocols/TableCellViewModel.html | 69 +++---- .../TableSectionHeaderFooterViewModel.html | 21 +- .../TableViewCellModelEditActions.html | 13 +- docs/Structs.html | 96 ++++----- docs/Structs/CollectionSectionViewModel.html | 11 +- docs/Structs/CollectionViewModel.html | 23 ++- docs/Structs/SupplementaryViewInfo.html | 21 +- docs/Structs/TableSectionViewModel.html | 35 ++-- docs/Structs/TableViewModel.html | 35 ++-- docs/Structs/ViewRegistrationInfo.html | 71 ++++++- docs/Typealiases.html | 8 +- .../Contents/Resources/Documents/Classes.html | 38 ++-- .../Classes/CollectionViewDriver.html | 36 ++-- .../Documents/Classes/TableViewDriver.html | 76 ++++++- .../TableViewDriver/TableRefreshContext.html | 15 +- .../Contents/Resources/Documents/Enums.html | 42 ++-- .../Enums/SupplementaryViewKind.html | 13 +- .../Enums/ViewRegistrationMethod.html | 11 +- .../Contents/Resources/Documents/Guides.html | 8 +- .../Resources/Documents/Protocols.html | 152 ++++++++------ .../Protocols/CollectionCellViewModel.html | 33 ++-- .../CollectionSupplementaryViewModel.html | 21 +- .../Protocols/DiffableViewModel.html | 13 +- .../Protocols/ReusableCellProtocol.html | 187 ++++++++++++++++++ .../ReusableCellViewModelProtocol.html | 13 +- ...eusableSupplementaryViewModelProtocol.html | 13 +- .../Protocols/TableCellViewModel.html | 69 +++---- .../TableSectionHeaderFooterViewModel.html | 21 +- .../TableViewCellModelEditActions.html | 13 +- .../Contents/Resources/Documents/Structs.html | 96 ++++----- .../Structs/CollectionSectionViewModel.html | 11 +- .../Structs/CollectionViewModel.html | 23 ++- .../Structs/SupplementaryViewInfo.html | 21 +- .../Structs/TableSectionViewModel.html | 35 ++-- .../Documents/Structs/TableViewModel.html | 35 ++-- .../Structs/ViewRegistrationInfo.html | 71 ++++++- .../Resources/Documents/Typealiases.html | 8 +- .../Resources/Documents/getting-started.html | 51 ++--- .../Contents/Resources/Documents/index.html | 29 +-- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/Documents/vision.html | 7 +- .../Contents/Resources/docSet.dsidx | Bin 45056 -> 45056 bytes docs/docsets/ReactiveLists.tgz | Bin 75074 -> 77349 bytes docs/getting-started.html | 51 ++--- docs/index.html | 29 +-- docs/search.json | 2 +- docs/undocumented.json | 2 +- docs/vision.html | 7 +- 63 files changed, 1569 insertions(+), 759 deletions(-) create mode 100644 docs/Protocols/ReusableCellProtocol.html create mode 100644 docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html diff --git a/docs/Classes.html b/docs/Classes.html index 137c035..160dd5b 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -10,6 +10,7 @@ +
@@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

Classes

  • - - - TableViewDriver + + + CollectionViewDriver
    @@ -148,16 +152,17 @@

    Classes

    -

    A data source that drives the table views appereance and behavior based on an underlying -TableViewModel.

    +

    A data source that drives the collection views appereance and behavior based on an underlying +CollectionViewModel.

    - See more + See more

    Declaration

    Swift

    -
    open class TableViewDriver: NSObject
    +
    @objc
    +public class CollectionViewDriver : NSObject
    @@ -171,9 +176,9 @@

    Declaration

  • @@ -181,16 +186,17 @@

    Declaration

    -

    A data source that drives the collection views appereance and behavior based on an underlying -CollectionViewModel.

    +

    A data source that drives the table views appereance and behavior based on an underlying +TableViewModel.

    - See more + See more

    Declaration

    Swift

    -
    public class CollectionViewDriver: NSObject
    +
    @objc
    +open class TableViewDriver : NSObject
    @@ -202,8 +208,8 @@

    Declaration

  • diff --git a/docs/Classes/CollectionViewDriver.html b/docs/Classes/CollectionViewDriver.html index 9a82182..5e24e41 100644 --- a/docs/Classes/CollectionViewDriver.html +++ b/docs/Classes/CollectionViewDriver.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,8 @@

    CollectionViewDriver

    -
    public class CollectionViewDriver: NSObject
    +
    @objc
    +public class CollectionViewDriver : NSObject
    @@ -153,9 +157,9 @@

    Properties

  • - + - collectionView + collectionView
    @@ -180,9 +184,9 @@

    Declaration

  • - + - collectionViewModel + collectionViewModel
    @@ -195,12 +199,12 @@

    Declaration

    When this property is set, the UI of the related UICollectionView will be updated. If not only the content of individual cells/sections has changed, but instead cells/sections were moved/inserted/deleted, the behavior of this setter depends on the -value of the automaticDiffingEnabled property.

    +value of the automaticDiffingEnabled property.

    -

    If automaticDiffingEnabled is set to true, and cells/sections have been moved/inserted/deleted, +

    If automaticDiffingEnabled is set to true, and cells/sections have been moved/inserted/deleted, updating this property will result in the UI of the collection view being updated automatically.

    -

    If automaticDiffingEnabled is set to false, and cells/sections have been moved/inserted/deleted, +

    If automaticDiffingEnabled is set to false, and cells/sections have been moved/inserted/deleted, the caller must update the UICollectionView state manually, to bring it back in sync with the new model, e.g. by calling reloadData() on the collection view.

    @@ -209,7 +213,7 @@

    Declaration

    Declaration

    Swift

    -
    public var collectionViewModel: CollectionViewModel?
    +
    public var collectionViewModel: CollectionViewModel? { get set }
    @@ -219,9 +223,9 @@

    Declaration

  • - + - automaticDiffingEnabled + automaticDiffingEnabled
    @@ -229,11 +233,11 @@

    Declaration

    -

    If this property is set to true, updating the collectionViewModel will always +

    If this property is set to true, updating the collectionViewModel will always automatically lead to updating the UI state of the UICollectionView, even if cells/sections were moved/inserted/deleted.

    -

    For details, see the documentation for CollectionViewDriver.collectionViewModel.

    +

    For details, see the documentation for CollectionViewDriver.collectionViewModel.

    @@ -374,7 +378,7 @@

    Change and UI Update Handling

    Updates all currently visible cells and sections, such that they reflect the latest state decribed in their respective view models. Typically this method should not be -called directly, as it is called automatically whenever the collectionViewModel property +called directly, as it is called automatically whenever the collectionViewModel property is updated.

    @@ -394,8 +398,8 @@

    Declaration

    diff --git a/docs/Classes/TableViewDriver.html b/docs/Classes/TableViewDriver.html index 59ca8b0..4c8dbf2 100644 --- a/docs/Classes/TableViewDriver.html +++ b/docs/Classes/TableViewDriver.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,8 @@

    TableViewDriver

    -
    open class TableViewDriver: NSObject
    +
    @objc
    +open class TableViewDriver : NSObject
    @@ -174,9 +178,9 @@

    Declaration

  • - + - tableView + tableView
    @@ -201,9 +205,9 @@

    Declaration

  • - + - tableViewModel + tableViewModel
    @@ -230,7 +234,61 @@

    Declaration

    Declaration

    Swift

    -
    public var tableViewModel: TableViewModel?
    +
    public var tableViewModel: TableViewModel? { get set }
    + +
    +
    + +
  • + +
  • +
    + + + + insertionAnimation + +
    +
    +
    +
    +
    +
    +

    The animation for row insertions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var insertionAnimation: UITableViewRowAnimation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + deletionAnimation + +
    +
    +
    +
    +
    +
    +

    The animation for row deletions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deletionAnimation: UITableViewRowAnimation
    @@ -353,7 +411,7 @@

    Change and UI Update Handling

    Updates all currently visible cells and sections, such that they reflect the latest state decribed in their respective view models. Typically this method should not be -called directly, as it is called automatically whenever the tableViewModel property +called directly, as it is called automatically whenever the tableViewModel property is updated.

    @@ -373,8 +431,8 @@

    Declaration

    diff --git a/docs/Classes/TableViewDriver/TableRefreshContext.html b/docs/Classes/TableViewDriver/TableRefreshContext.html index 86cb2b0..8d43417 100644 --- a/docs/Classes/TableViewDriver/TableRefreshContext.html +++ b/docs/Classes/TableViewDriver/TableRefreshContext.html @@ -76,6 +76,9 @@
  • + @@ -169,10 +172,6 @@

    Declaration

    - - -
    -
    • @@ -200,10 +199,6 @@

      Declaration

    • -
    -
    -
    -
    • @@ -236,8 +231,8 @@

      Declaration

      diff --git a/docs/Enums.html b/docs/Enums.html index 562bc62..bf3a90d 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -10,6 +10,7 @@ +
      @@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

      Enumerations

    • @@ -148,15 +152,20 @@

      Enumerations

      -

      The method for registering cells and supplementary views

      +

      Defines the kind of a supplementary view.

      - See more +
        +
      • header: indicates that the view is a header
      • +
      • footer: indicates that the view is a footer
      • +
      + + See more

      Declaration

      Swift

      -
      public enum ViewRegistrationMethod
      +
      public enum SupplementaryViewKind : Equatable
      @@ -170,9 +179,9 @@

      Declaration

    • @@ -180,20 +189,15 @@

      Declaration

      -

      Defines the kind of a supplementary view.

      - -
        -
      • header: indicates that the view is a header
      • -
      • footer: indicates that the view is a footer
      • -
      +

      The method for registering cells and supplementary views

      - See more + See more

      Declaration

      Swift

      -
      public enum SupplementaryViewKind
      +
      public enum ViewRegistrationMethod
      @@ -205,8 +209,8 @@

      Declaration

    • diff --git a/docs/Enums/SupplementaryViewKind.html b/docs/Enums/SupplementaryViewKind.html index 2285065..cc815e9 100644 --- a/docs/Enums/SupplementaryViewKind.html +++ b/docs/Enums/SupplementaryViewKind.html @@ -76,6 +76,9 @@
    • + @@ -132,7 +135,7 @@

      SupplementaryViewKind

      -
      public enum SupplementaryViewKind
      +
      public enum SupplementaryViewKind : Equatable
      @@ -174,10 +177,6 @@

      Declaration

    • -
    -
    -
    -
    - - -
    - +
    +
    + -
    -
    - +
    +
    +
    • @@ -360,15 +396,15 @@

      Declaration

      -

      View model for supplementary views in collection views.

      +

      Describes a reusable cell and specifies how to register it.

      - See more + See more

      Declaration

      Swift

      -
      public protocol CollectionSupplementaryViewModel: ReusableSupplementaryViewModelProtocol
      +
      public protocol ReusableCellProtocol
      @@ -380,8 +416,8 @@

      Declaration

      diff --git a/docs/Protocols/CollectionCellViewModel.html b/docs/Protocols/CollectionCellViewModel.html index bfabf5a..013ef67 100644 --- a/docs/Protocols/CollectionCellViewModel.html +++ b/docs/Protocols/CollectionCellViewModel.html @@ -76,6 +76,9 @@
    • + @@ -132,7 +135,7 @@

      CollectionCellViewModel

      -
      public protocol CollectionCellViewModel: ReusableCellViewModelProtocol
      +
      public protocol CollectionCellViewModel : ReusableCellViewModelProtocol
      @@ -145,9 +148,9 @@

      CollectionCellViewModel

    • @@ -162,7 +165,7 @@

      CollectionCellViewModel

      Declaration

      Swift

      -
      var accessibilityFormat: CellAccessibilityFormat
      +
      var accessibilityFormat: CellAccessibilityFormat { get }
      @@ -172,9 +175,9 @@

      Declaration

    • - + - shouldHighlight + shouldHighlight Default implementation @@ -197,7 +200,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var shouldHighlight: Bool
      +
      var shouldHighlight: Bool { get }
      @@ -207,9 +210,9 @@

      Declaration

    • - + - didSelect + didSelect Default implementation @@ -232,7 +235,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var didSelect: DidSelectClosure?
      +
      var didSelect: DidSelectClosure? { get }
      @@ -242,9 +245,9 @@

      Declaration

    • - + - didDeselect + didDeselect Default implementation @@ -267,7 +270,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var didDeselect: DidDeselectClosure?
      +
      var didDeselect: DidDeselectClosure? { get }
      @@ -326,8 +329,8 @@

      Parameters

    diff --git a/docs/Protocols/CollectionSupplementaryViewModel.html b/docs/Protocols/CollectionSupplementaryViewModel.html index 05be54f..f0eaa01 100644 --- a/docs/Protocols/CollectionSupplementaryViewModel.html +++ b/docs/Protocols/CollectionSupplementaryViewModel.html @@ -76,6 +76,9 @@ + @@ -132,7 +135,7 @@

    CollectionSupplementaryViewModel

    -
    public protocol CollectionSupplementaryViewModel: ReusableSupplementaryViewModelProtocol
    +
    public protocol CollectionSupplementaryViewModel : ReusableSupplementaryViewModelProtocol
    @@ -145,9 +148,9 @@

    CollectionSupplementaryViewModel

  • - + - viewInfo + viewInfo Default implementation @@ -170,7 +173,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo?
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -180,9 +183,9 @@

    Declaration

  • - + - height + height Default implementation @@ -205,7 +208,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var height: CGFloat?
    +
    var height: CGFloat? { get }
    @@ -264,8 +267,8 @@

    Parameters

    diff --git a/docs/Protocols/DiffableViewModel.html b/docs/Protocols/DiffableViewModel.html index d7d490c..0ce145f 100644 --- a/docs/Protocols/DiffableViewModel.html +++ b/docs/Protocols/DiffableViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    DiffableViewModel

  • - + - diffingKey + diffingKey Default implementation @@ -177,7 +180,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var diffingKey: DiffingKey
    +
    var diffingKey: DiffingKey { get }
    @@ -189,8 +192,8 @@

    Declaration

    diff --git a/docs/Protocols/ReusableCellProtocol.html b/docs/Protocols/ReusableCellProtocol.html new file mode 100644 index 0000000..c9f6d54 --- /dev/null +++ b/docs/Protocols/ReusableCellProtocol.html @@ -0,0 +1,187 @@ + + + + ReusableCellProtocol Protocol Reference + + + + + + + + + + +
    +
    +

    ReactiveLists Docs (100% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    ReusableCellProtocol

    +
    +
    +
    public protocol ReusableCellProtocol
    + +
    +
    +

    Describes a reusable cell and specifies how to register it.

    + +
    +
    +
    +
      +
    • +
      + + + + registrationInfo + +
      +
      +
      +
      +
      +
      +

      The registration info for the cell.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      var registrationInfo: ViewRegistrationInfo { get }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/docs/Protocols/ReusableCellViewModelProtocol.html b/docs/Protocols/ReusableCellViewModelProtocol.html index 4f697bf..e3bd05b 100644 --- a/docs/Protocols/ReusableCellViewModelProtocol.html +++ b/docs/Protocols/ReusableCellViewModelProtocol.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    ReusableCellViewModelProtocol

  • @@ -163,7 +166,7 @@

    ReusableCellViewModelProtocol

    Declaration

    Swift

    -
    var registrationInfo: ViewRegistrationInfo
    +
    var registrationInfo: ViewRegistrationInfo { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/Protocols/ReusableSupplementaryViewModelProtocol.html b/docs/Protocols/ReusableSupplementaryViewModelProtocol.html index 4a56b50..e937708 100644 --- a/docs/Protocols/ReusableSupplementaryViewModelProtocol.html +++ b/docs/Protocols/ReusableSupplementaryViewModelProtocol.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    ReusableSupplementaryViewModelProtocol

  • - + - viewInfo + viewInfo
    @@ -163,7 +166,7 @@

    ReusableSupplementaryViewModelProtocol

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo?
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/Protocols/TableCellViewModel.html b/docs/Protocols/TableCellViewModel.html index 9c81e83..a234d1a 100644 --- a/docs/Protocols/TableCellViewModel.html +++ b/docs/Protocols/TableCellViewModel.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    TableCellViewModel

    -
    public protocol TableCellViewModel: ReusableCellViewModelProtocol
    +
    public protocol TableCellViewModel : ReusableCellViewModelProtocol
    @@ -145,9 +148,9 @@

    TableCellViewModel

  • @@ -162,7 +165,7 @@

    TableCellViewModel

    Declaration

    Swift

    -
    var accessibilityFormat: CellAccessibilityFormat
    +
    var accessibilityFormat: CellAccessibilityFormat { get }
    @@ -172,9 +175,9 @@

    Declaration

  • - + - rowHeight + rowHeight Default implementation @@ -197,7 +200,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var rowHeight: CGFloat
    +
    var rowHeight: CGFloat { get }
    @@ -207,9 +210,9 @@

    Declaration

  • - + - editingStyle + editingStyle Default implementation @@ -232,7 +235,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var editingStyle: UITableViewCellEditingStyle
    +
    var editingStyle: UITableViewCellEditingStyle { get }
    @@ -242,9 +245,9 @@

    Declaration

  • - + - shouldHighlight + shouldHighlight Default implementation @@ -267,7 +270,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldHighlight: Bool
    +
    var shouldHighlight: Bool { get }
    @@ -277,9 +280,9 @@

    Declaration

  • - + - shouldIndentWhileEditing + shouldIndentWhileEditing Default implementation @@ -302,7 +305,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldIndentWhileEditing: Bool
    +
    var shouldIndentWhileEditing: Bool { get }
    @@ -312,9 +315,9 @@

    Declaration

  • - + - willBeginEditing + willBeginEditing Default implementation @@ -337,7 +340,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var willBeginEditing: WillBeginEditingClosure?
    +
    var willBeginEditing: WillBeginEditingClosure? { get }
    @@ -347,9 +350,9 @@

    Declaration

  • - + - didEndEditing + didEndEditing Default implementation @@ -372,7 +375,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didEndEditing: DidEndEditingClosure?
    +
    var didEndEditing: DidEndEditingClosure? { get }
    @@ -382,9 +385,9 @@

    Declaration

  • - + - commitEditingStyle + commitEditingStyle Default implementation @@ -407,7 +410,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var commitEditingStyle: CommitEditingStyleClosure?
    +
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    @@ -417,9 +420,9 @@

    Declaration

  • - + - didSelect + didSelect Default implementation @@ -442,7 +445,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didSelect: DidSelectClosure?
    +
    var didSelect: DidSelectClosure? { get }
    @@ -452,9 +455,9 @@

    Declaration

  • - + - accessoryButtonTapped + accessoryButtonTapped Default implementation @@ -477,7 +480,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var accessoryButtonTapped: AccessoryButtonTappedClosure?
    +
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    @@ -536,8 +539,8 @@

    Parameters

    diff --git a/docs/Protocols/TableSectionHeaderFooterViewModel.html b/docs/Protocols/TableSectionHeaderFooterViewModel.html index 5abc33d..e69fff8 100644 --- a/docs/Protocols/TableSectionHeaderFooterViewModel.html +++ b/docs/Protocols/TableSectionHeaderFooterViewModel.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    TableSectionHeaderFooterViewModel

    -
    public protocol TableSectionHeaderFooterViewModel: ReusableSupplementaryViewModelProtocol
    +
    public protocol TableSectionHeaderFooterViewModel : ReusableSupplementaryViewModelProtocol
    @@ -146,9 +149,9 @@

    TableSectionHeaderFooterViewModel

  • - + - title + title
    @@ -163,7 +166,7 @@

    TableSectionHeaderFooterViewModel

    Declaration

    Swift

    -
    var title: String?
    +
    var title: String? { get }
    @@ -173,9 +176,9 @@

    Declaration

  • - + - height + height
    @@ -190,7 +193,7 @@

    Declaration

    Declaration

    Swift

    -
    var height: CGFloat?
    +
    var height: CGFloat? { get }
    @@ -249,8 +252,8 @@

    Parameters

    diff --git a/docs/Protocols/TableViewCellModelEditActions.html b/docs/Protocols/TableViewCellModelEditActions.html index 9111ce2..e00afbe 100644 --- a/docs/Protocols/TableViewCellModelEditActions.html +++ b/docs/Protocols/TableViewCellModelEditActions.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    TableViewCellModelEditActions

  • @@ -163,7 +166,7 @@

    TableViewCellModelEditActions

    Declaration

    Swift

    -
    var editActions: [UITableViewRowAction]
    +
    var editActions: [UITableViewRowAction] { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/Structs.html b/docs/Structs.html index 6f5a197..47e8b3f 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -10,6 +10,7 @@ +
    @@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

    Structures

  • @@ -148,31 +152,27 @@

    Structures

    -

    Describes the registration information for a cell or supplementary view.

    +

    The view model that describes a UICollectionView.

    - See more + See more

    Declaration

    Swift

    -
    public struct ViewRegistrationInfo
    +
    public struct CollectionViewModel
  • - -
    -
    - +
    +
    +
    • @@ -208,15 +212,15 @@

      Declaration

      -

      The view model that describes a UITableView.

      +

      Metadata thats required for setting up a supplementary view.

      - See more + See more

      Declaration

      Swift

      -
      public struct TableViewModel
      +
      public struct SupplementaryViewInfo : Equatable
      @@ -230,9 +234,9 @@

      Declaration

    • @@ -240,31 +244,27 @@

      Declaration

      -

      Metadata thats required for setting up a supplementary view.

      +

      View model for a table view section.

      - See more + See more

      Declaration

      Swift

      -
      public struct SupplementaryViewInfo
      +
      public struct TableSectionViewModel
    • -
    -
    -
    -
    • @@ -272,27 +272,31 @@

      Declaration

      -

      The view model that describes a UICollectionView.

      +

      The view model that describes a UITableView.

      - See more + See more

      Declaration

      Swift

      -
      public struct CollectionViewModel
      +
      public struct TableViewModel
    • +
    +
    +
    +
    diff --git a/docs/Structs/SupplementaryViewInfo.html b/docs/Structs/SupplementaryViewInfo.html index 29d8c20..2875131 100644 --- a/docs/Structs/SupplementaryViewInfo.html +++ b/docs/Structs/SupplementaryViewInfo.html @@ -76,6 +76,9 @@ + @@ -132,7 +135,7 @@

    SupplementaryViewInfo

    -
    public struct SupplementaryViewInfo
    +
    public struct SupplementaryViewInfo : Equatable
    @@ -145,9 +148,9 @@

    SupplementaryViewInfo

  • @@ -172,9 +175,9 @@

    Declaration

  • - + - kind + kind
    @@ -199,9 +202,9 @@

    Declaration

  • @@ -304,8 +307,8 @@

    Parameters

    diff --git a/docs/Structs/TableSectionViewModel.html b/docs/Structs/TableSectionViewModel.html index 95a8a31..fd87d39 100644 --- a/docs/Structs/TableSectionViewModel.html +++ b/docs/Structs/TableSectionViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    TableSectionViewModel

  • @@ -172,9 +175,9 @@

    Declaration

  • @@ -199,9 +202,9 @@

    Declaration

  • @@ -226,9 +229,9 @@

    Declaration

  • @@ -243,7 +246,7 @@

    Declaration

    Declaration

    Swift

    -
    public var collapsed: Bool = false
    +
    public var collapsed: Bool
    @@ -253,9 +256,9 @@

    Declaration

  • @@ -287,9 +290,9 @@

    Declaration

  • - + - isEmpty + isEmpty
    @@ -304,7 +307,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool
    +
    public var isEmpty: Bool { get }
    @@ -531,8 +534,8 @@

    Parameters

    diff --git a/docs/Structs/TableViewModel.html b/docs/Structs/TableViewModel.html index b872263..a9d56ba 100644 --- a/docs/Structs/TableViewModel.html +++ b/docs/Structs/TableViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    TableViewModel

  • @@ -172,9 +175,9 @@

    Declaration

  • @@ -199,9 +202,9 @@

    Declaration

  • - + - isEmpty + isEmpty
    @@ -216,7 +219,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool
    +
    public var isEmpty: Bool { get }
    @@ -284,7 +287,7 @@

    Parameters

    Initializes a table view model with the sections provided. -Optionally accepts the sectionIndexTitles for this table view.

    +Optionally accepts the sectionIndexTitles for this table view.

    @@ -332,9 +335,9 @@

    Parameters

  • @@ -349,7 +352,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(section: Int) -> TableSectionViewModel?
    +
    public subscript(section: Int) -> TableSectionViewModel? { get }
    @@ -378,9 +381,9 @@

    Parameters

  • @@ -395,7 +398,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(indexPath: IndexPath) -> TableCellViewModel?
    +
    public subscript(indexPath: IndexPath) -> TableCellViewModel? { get }
    @@ -426,8 +429,8 @@

    Parameters

    diff --git a/docs/Structs/ViewRegistrationInfo.html b/docs/Structs/ViewRegistrationInfo.html index 8065e71..db247a6 100644 --- a/docs/Structs/ViewRegistrationInfo.html +++ b/docs/Structs/ViewRegistrationInfo.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    ViewRegistrationInfo

    -
    public struct ViewRegistrationInfo
    +
    public struct ViewRegistrationInfo : Equatable
    @@ -142,6 +145,60 @@

    ViewRegistrationInfo

      +
    • +
      + + + + reuseIdentifier + +
      +
      +
      +
      +
      +
      +

      The reuse identifier for the view.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public let reuseIdentifier: String
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + registrationMethod + +
      +
      +
      +
      +
      +
      +

      The registration method for the view.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public let registrationMethod: ViewRegistrationMethod
      + +
      +
      +
      +
      +
    • @@ -158,8 +215,8 @@

      ViewRegistrationInfo

      Initializes a new ViewRegistrationInfo for the provided classType.

      Note

      -

      The class name is used for reuseIdentifier. -The registrationMethod is set to .fromClass.

      +

      The class name is used for reuseIdentifier. +The registrationMethod is set to .fromClass.

      @@ -210,8 +267,8 @@

      Parameters

      Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

      Note

      -

      The class name is used for reuseIdentifier. -The registrationMethod is set to .fromNib using the provided nibName and bundle.

      +

      The class name is used for reuseIdentifier. +The registrationMethod is set to .fromNib using the provided nibName and bundle.

      @@ -275,8 +332,8 @@

      Parameters

    diff --git a/docs/Typealiases.html b/docs/Typealiases.html index f370eb0..db9706d 100644 --- a/docs/Typealiases.html +++ b/docs/Typealiases.html @@ -10,6 +10,7 @@ +
    @@ -75,6 +76,9 @@ + @@ -167,8 +171,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html index 137c035..160dd5b 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html @@ -10,6 +10,7 @@ +
    @@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

    Classes

  • @@ -148,16 +152,17 @@

    Classes

    -

    A data source that drives the table views appereance and behavior based on an underlying -TableViewModel.

    +

    A data source that drives the collection views appereance and behavior based on an underlying +CollectionViewModel.

    - See more + See more

    Declaration

    Swift

    -
    open class TableViewDriver: NSObject
    +
    @objc
    +public class CollectionViewDriver : NSObject
    @@ -171,9 +176,9 @@

    Declaration

  • @@ -181,16 +186,17 @@

    Declaration

    -

    A data source that drives the collection views appereance and behavior based on an underlying -CollectionViewModel.

    +

    A data source that drives the table views appereance and behavior based on an underlying +TableViewModel.

    - See more + See more

    Declaration

    Swift

    -
    public class CollectionViewDriver: NSObject
    +
    @objc
    +open class TableViewDriver : NSObject
    @@ -202,8 +208,8 @@

    Declaration

  • diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html index 9a82182..5e24e41 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,8 @@

    CollectionViewDriver

    -
    public class CollectionViewDriver: NSObject
    +
    @objc
    +public class CollectionViewDriver : NSObject
    @@ -153,9 +157,9 @@

    Properties

  • @@ -180,9 +184,9 @@

    Declaration

  • @@ -195,12 +199,12 @@

    Declaration

    When this property is set, the UI of the related UICollectionView will be updated. If not only the content of individual cells/sections has changed, but instead cells/sections were moved/inserted/deleted, the behavior of this setter depends on the -value of the automaticDiffingEnabled property.

    +value of the automaticDiffingEnabled property.

    -

    If automaticDiffingEnabled is set to true, and cells/sections have been moved/inserted/deleted, +

    If automaticDiffingEnabled is set to true, and cells/sections have been moved/inserted/deleted, updating this property will result in the UI of the collection view being updated automatically.

    -

    If automaticDiffingEnabled is set to false, and cells/sections have been moved/inserted/deleted, +

    If automaticDiffingEnabled is set to false, and cells/sections have been moved/inserted/deleted, the caller must update the UICollectionView state manually, to bring it back in sync with the new model, e.g. by calling reloadData() on the collection view.

    @@ -209,7 +213,7 @@

    Declaration

    Declaration

    Swift

    -
    public var collectionViewModel: CollectionViewModel?
    +
    public var collectionViewModel: CollectionViewModel? { get set }
    @@ -219,9 +223,9 @@

    Declaration

  • @@ -229,11 +233,11 @@

    Declaration

    -

    If this property is set to true, updating the collectionViewModel will always +

    If this property is set to true, updating the collectionViewModel will always automatically lead to updating the UI state of the UICollectionView, even if cells/sections were moved/inserted/deleted.

    -

    For details, see the documentation for CollectionViewDriver.collectionViewModel.

    +

    For details, see the documentation for CollectionViewDriver.collectionViewModel.

    @@ -374,7 +378,7 @@

    Change and UI Update Handling

    Updates all currently visible cells and sections, such that they reflect the latest state decribed in their respective view models. Typically this method should not be -called directly, as it is called automatically whenever the collectionViewModel property +called directly, as it is called automatically whenever the collectionViewModel property is updated.

    @@ -394,8 +398,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html index 59ca8b0..4c8dbf2 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,8 @@

    TableViewDriver

    -
    open class TableViewDriver: NSObject
    +
    @objc
    +open class TableViewDriver : NSObject
    @@ -174,9 +178,9 @@

    Declaration

  • @@ -201,9 +205,9 @@

    Declaration

  • @@ -230,7 +234,61 @@

    Declaration

    Declaration

    Swift

    -
    public var tableViewModel: TableViewModel?
    +
    public var tableViewModel: TableViewModel? { get set }
    + +
    +
    + +
  • +
  • +
  • +
    + + + + insertionAnimation + +
    +
    +
    +
    +
    +
    +

    The animation for row insertions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var insertionAnimation: UITableViewRowAnimation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + deletionAnimation + +
    +
    +
    +
    +
    +
    +

    The animation for row deletions.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deletionAnimation: UITableViewRowAnimation
    @@ -353,7 +411,7 @@

    Change and UI Update Handling

    Updates all currently visible cells and sections, such that they reflect the latest state decribed in their respective view models. Typically this method should not be -called directly, as it is called automatically whenever the tableViewModel property +called directly, as it is called automatically whenever the tableViewModel property is updated.

    @@ -373,8 +431,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver/TableRefreshContext.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver/TableRefreshContext.html index 86cb2b0..8d43417 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver/TableRefreshContext.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver/TableRefreshContext.html @@ -76,6 +76,9 @@
  • + @@ -169,10 +172,6 @@

    Declaration

    - - -
    -
    • @@ -200,10 +199,6 @@

      Declaration

    • -
    -
    -
    -
    • @@ -236,8 +231,8 @@

      Declaration

      diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html index 562bc62..bf3a90d 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html @@ -10,6 +10,7 @@ +
      @@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

      Enumerations

    • @@ -148,15 +152,20 @@

      Enumerations

      -

      The method for registering cells and supplementary views

      +

      Defines the kind of a supplementary view.

      - See more +
        +
      • header: indicates that the view is a header
      • +
      • footer: indicates that the view is a footer
      • +
      + + See more

      Declaration

      Swift

      -
      public enum ViewRegistrationMethod
      +
      public enum SupplementaryViewKind : Equatable
      @@ -170,9 +179,9 @@

      Declaration

    • @@ -180,20 +189,15 @@

      Declaration

      -

      Defines the kind of a supplementary view.

      - -
        -
      • header: indicates that the view is a header
      • -
      • footer: indicates that the view is a footer
      • -
      +

      The method for registering cells and supplementary views

      - See more + See more

      Declaration

      Swift

      -
      public enum SupplementaryViewKind
      +
      public enum ViewRegistrationMethod
      @@ -205,8 +209,8 @@

      Declaration

    • diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html index 2285065..cc815e9 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html @@ -76,6 +76,9 @@
    • + @@ -132,7 +135,7 @@

      SupplementaryViewKind

      -
      public enum SupplementaryViewKind
      +
      public enum SupplementaryViewKind : Equatable
      @@ -174,10 +177,6 @@

      Declaration

    • -
    -
    -
    -
    • @@ -210,8 +209,8 @@

      Declaration

      diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html index 8406b02..bf43ca0 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html @@ -76,6 +76,9 @@
    • + @@ -169,10 +172,6 @@

      Declaration

    - - -
    - +
    +
    + -
    -
    - +
    +
    +
    • @@ -360,15 +396,15 @@

      Declaration

      -

      View model for supplementary views in collection views.

      +

      Describes a reusable cell and specifies how to register it.

      - See more + See more

      Declaration

      Swift

      -
      public protocol CollectionSupplementaryViewModel: ReusableSupplementaryViewModelProtocol
      +
      public protocol ReusableCellProtocol
      @@ -380,8 +416,8 @@

      Declaration

      diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html index bfabf5a..013ef67 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html @@ -76,6 +76,9 @@
    • + @@ -132,7 +135,7 @@

      CollectionCellViewModel

      -
      public protocol CollectionCellViewModel: ReusableCellViewModelProtocol
      +
      public protocol CollectionCellViewModel : ReusableCellViewModelProtocol
      @@ -145,9 +148,9 @@

      CollectionCellViewModel

    • @@ -162,7 +165,7 @@

      CollectionCellViewModel

      Declaration

      Swift

      -
      var accessibilityFormat: CellAccessibilityFormat
      +
      var accessibilityFormat: CellAccessibilityFormat { get }
      @@ -172,9 +175,9 @@

      Declaration

    • - + - shouldHighlight + shouldHighlight Default implementation @@ -197,7 +200,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var shouldHighlight: Bool
      +
      var shouldHighlight: Bool { get }
      @@ -207,9 +210,9 @@

      Declaration

    • - + - didSelect + didSelect Default implementation @@ -232,7 +235,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var didSelect: DidSelectClosure?
      +
      var didSelect: DidSelectClosure? { get }
      @@ -242,9 +245,9 @@

      Declaration

    • - + - didDeselect + didDeselect Default implementation @@ -267,7 +270,7 @@

      Default Implementation

      Declaration

      Swift

      -
      var didDeselect: DidDeselectClosure?
      +
      var didDeselect: DidDeselectClosure? { get }
      @@ -326,8 +329,8 @@

      Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html index 05be54f..f0eaa01 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html @@ -76,6 +76,9 @@ + @@ -132,7 +135,7 @@

    CollectionSupplementaryViewModel

    -
    public protocol CollectionSupplementaryViewModel: ReusableSupplementaryViewModelProtocol
    +
    public protocol CollectionSupplementaryViewModel : ReusableSupplementaryViewModelProtocol
    @@ -145,9 +148,9 @@

    CollectionSupplementaryViewModel

  • - + - viewInfo + viewInfo Default implementation @@ -170,7 +173,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo?
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -180,9 +183,9 @@

    Declaration

  • - + - height + height Default implementation @@ -205,7 +208,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var height: CGFloat?
    +
    var height: CGFloat? { get }
    @@ -264,8 +267,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html index d7d490c..0ce145f 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    DiffableViewModel

  • - + - diffingKey + diffingKey Default implementation @@ -177,7 +180,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var diffingKey: DiffingKey
    +
    var diffingKey: DiffingKey { get }
    @@ -189,8 +192,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html new file mode 100644 index 0000000..c9f6d54 --- /dev/null +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html @@ -0,0 +1,187 @@ + + + + ReusableCellProtocol Protocol Reference + + + + + + + + + + +
    +
    +

    ReactiveLists Docs (100% documented)

    +

    View on GitHub

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    ReusableCellProtocol

    +
    +
    +
    public protocol ReusableCellProtocol
    + +
    +
    +

    Describes a reusable cell and specifies how to register it.

    + +
    +
    +
    +
      +
    • +
      + + + + registrationInfo + +
      +
      +
      +
      +
      +
      +

      The registration info for the cell.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      var registrationInfo: ViewRegistrationInfo { get }
      + +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + + + diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html index 4f697bf..e3bd05b 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    ReusableCellViewModelProtocol

  • @@ -163,7 +166,7 @@

    ReusableCellViewModelProtocol

    Declaration

    Swift

    -
    var registrationInfo: ViewRegistrationInfo
    +
    var registrationInfo: ViewRegistrationInfo { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html index 4a56b50..e937708 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    ReusableSupplementaryViewModelProtocol

  • - + - viewInfo + viewInfo
    @@ -163,7 +166,7 @@

    ReusableSupplementaryViewModelProtocol

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo?
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html index 9c81e83..a234d1a 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    TableCellViewModel

    -
    public protocol TableCellViewModel: ReusableCellViewModelProtocol
    +
    public protocol TableCellViewModel : ReusableCellViewModelProtocol
    @@ -145,9 +148,9 @@

    TableCellViewModel

  • @@ -162,7 +165,7 @@

    TableCellViewModel

    Declaration

    Swift

    -
    var accessibilityFormat: CellAccessibilityFormat
    +
    var accessibilityFormat: CellAccessibilityFormat { get }
    @@ -172,9 +175,9 @@

    Declaration

  • - + - rowHeight + rowHeight Default implementation @@ -197,7 +200,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var rowHeight: CGFloat
    +
    var rowHeight: CGFloat { get }
    @@ -207,9 +210,9 @@

    Declaration

  • - + - editingStyle + editingStyle Default implementation @@ -232,7 +235,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var editingStyle: UITableViewCellEditingStyle
    +
    var editingStyle: UITableViewCellEditingStyle { get }
    @@ -242,9 +245,9 @@

    Declaration

  • - + - shouldHighlight + shouldHighlight Default implementation @@ -267,7 +270,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldHighlight: Bool
    +
    var shouldHighlight: Bool { get }
    @@ -277,9 +280,9 @@

    Declaration

  • - + - shouldIndentWhileEditing + shouldIndentWhileEditing Default implementation @@ -302,7 +305,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldIndentWhileEditing: Bool
    +
    var shouldIndentWhileEditing: Bool { get }
    @@ -312,9 +315,9 @@

    Declaration

  • - + - willBeginEditing + willBeginEditing Default implementation @@ -337,7 +340,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var willBeginEditing: WillBeginEditingClosure?
    +
    var willBeginEditing: WillBeginEditingClosure? { get }
    @@ -347,9 +350,9 @@

    Declaration

  • - + - didEndEditing + didEndEditing Default implementation @@ -372,7 +375,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didEndEditing: DidEndEditingClosure?
    +
    var didEndEditing: DidEndEditingClosure? { get }
    @@ -382,9 +385,9 @@

    Declaration

  • - + - commitEditingStyle + commitEditingStyle Default implementation @@ -407,7 +410,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var commitEditingStyle: CommitEditingStyleClosure?
    +
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    @@ -417,9 +420,9 @@

    Declaration

  • - + - didSelect + didSelect Default implementation @@ -442,7 +445,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didSelect: DidSelectClosure?
    +
    var didSelect: DidSelectClosure? { get }
    @@ -452,9 +455,9 @@

    Declaration

  • - + - accessoryButtonTapped + accessoryButtonTapped Default implementation @@ -477,7 +480,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var accessoryButtonTapped: AccessoryButtonTappedClosure?
    +
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    @@ -536,8 +539,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html index 5abc33d..e69fff8 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    TableSectionHeaderFooterViewModel

    -
    public protocol TableSectionHeaderFooterViewModel: ReusableSupplementaryViewModelProtocol
    +
    public protocol TableSectionHeaderFooterViewModel : ReusableSupplementaryViewModelProtocol
    @@ -146,9 +149,9 @@

    TableSectionHeaderFooterViewModel

  • - + - title + title
    @@ -163,7 +166,7 @@

    TableSectionHeaderFooterViewModel

    Declaration

    Swift

    -
    var title: String?
    +
    var title: String? { get }
    @@ -173,9 +176,9 @@

    Declaration

  • - + - height + height
    @@ -190,7 +193,7 @@

    Declaration

    Declaration

    Swift

    -
    var height: CGFloat?
    +
    var height: CGFloat? { get }
    @@ -249,8 +252,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html index 9111ce2..e00afbe 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html @@ -76,6 +76,9 @@
  • + @@ -146,9 +149,9 @@

    TableViewCellModelEditActions

  • @@ -163,7 +166,7 @@

    TableViewCellModelEditActions

    Declaration

    Swift

    -
    var editActions: [UITableViewRowAction]
    +
    var editActions: [UITableViewRowAction] { get }
    @@ -175,8 +178,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html index 6f5a197..47e8b3f 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html @@ -10,6 +10,7 @@ +
    @@ -75,6 +76,9 @@ + @@ -138,9 +142,9 @@

    Structures

  • @@ -148,31 +152,27 @@

    Structures

    -

    Describes the registration information for a cell or supplementary view.

    +

    The view model that describes a UICollectionView.

    - See more + See more

    Declaration

    Swift

    -
    public struct ViewRegistrationInfo
    +
    public struct CollectionViewModel
  • - -
    -
    - +
    +
    +
    • @@ -208,15 +212,15 @@

      Declaration

      -

      The view model that describes a UITableView.

      +

      Metadata thats required for setting up a supplementary view.

      - See more + See more

      Declaration

      Swift

      -
      public struct TableViewModel
      +
      public struct SupplementaryViewInfo : Equatable
      @@ -230,9 +234,9 @@

      Declaration

    • @@ -240,31 +244,27 @@

      Declaration

      -

      Metadata thats required for setting up a supplementary view.

      +

      View model for a table view section.

      - See more + See more

      Declaration

      Swift

      -
      public struct SupplementaryViewInfo
      +
      public struct TableSectionViewModel
    • -
    -
    -
    -
    • @@ -272,27 +272,31 @@

      Declaration

      -

      The view model that describes a UICollectionView.

      +

      The view model that describes a UITableView.

      - See more + See more

      Declaration

      Swift

      -
      public struct CollectionViewModel
      +
      public struct TableViewModel
    • +
    +
    +
    +
    • @@ -300,15 +304,15 @@

      Declaration

      -

      View model for a collection view section.

      +

      Describes the registration information for a cell or supplementary view.

      - See more + See more

      Declaration

      Swift

      -
      public struct CollectionSectionViewModel
      +
      public struct ViewRegistrationInfo : Equatable
      @@ -320,8 +324,8 @@

      Declaration

      diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html index 5809fd0..2552535 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html @@ -76,6 +76,9 @@
    • + @@ -145,9 +148,9 @@

      CollectionSectionViewModel

    • @@ -268,8 +271,8 @@

      Parameters

      diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html index c96f7a2..9bd3bf4 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html @@ -76,6 +76,9 @@
    • + @@ -145,9 +148,9 @@

      CollectionViewModel

    • @@ -218,9 +221,9 @@

      Parameters

    • @@ -235,7 +238,7 @@

      Parameters

      Declaration

      Swift

      -
      public subscript(section: Int) -> CollectionSectionViewModel?
      +
      public subscript(section: Int) -> CollectionSectionViewModel? { get }
      @@ -264,9 +267,9 @@

      Parameters

    • @@ -281,7 +284,7 @@

      Parameters

      Declaration

      Swift

      -
      public subscript(indexPath: IndexPath) -> CollectionCellViewModel?
      +
      public subscript(indexPath: IndexPath) -> CollectionCellViewModel? { get }
      @@ -312,8 +315,8 @@

      Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html index 29d8c20..2875131 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html @@ -76,6 +76,9 @@ + @@ -132,7 +135,7 @@

    SupplementaryViewInfo

    -
    public struct SupplementaryViewInfo
    +
    public struct SupplementaryViewInfo : Equatable
    @@ -145,9 +148,9 @@

    SupplementaryViewInfo

  • @@ -172,9 +175,9 @@

    Declaration

  • - + - kind + kind
    @@ -199,9 +202,9 @@

    Declaration

  • @@ -304,8 +307,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html index 95a8a31..fd87d39 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    TableSectionViewModel

  • @@ -172,9 +175,9 @@

    Declaration

  • @@ -199,9 +202,9 @@

    Declaration

  • @@ -226,9 +229,9 @@

    Declaration

  • @@ -243,7 +246,7 @@

    Declaration

    Declaration

    Swift

    -
    public var collapsed: Bool = false
    +
    public var collapsed: Bool
    @@ -253,9 +256,9 @@

    Declaration

  • @@ -287,9 +290,9 @@

    Declaration

  • - + - isEmpty + isEmpty
    @@ -304,7 +307,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool
    +
    public var isEmpty: Bool { get }
    @@ -531,8 +534,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html index b872263..a9d56ba 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html @@ -76,6 +76,9 @@
  • + @@ -145,9 +148,9 @@

    TableViewModel

  • @@ -172,9 +175,9 @@

    Declaration

  • @@ -199,9 +202,9 @@

    Declaration

  • - + - isEmpty + isEmpty
    @@ -216,7 +219,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool
    +
    public var isEmpty: Bool { get }
    @@ -284,7 +287,7 @@

    Parameters

    Initializes a table view model with the sections provided. -Optionally accepts the sectionIndexTitles for this table view.

    +Optionally accepts the sectionIndexTitles for this table view.

    @@ -332,9 +335,9 @@

    Parameters

  • @@ -349,7 +352,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(section: Int) -> TableSectionViewModel?
    +
    public subscript(section: Int) -> TableSectionViewModel? { get }
    @@ -378,9 +381,9 @@

    Parameters

  • @@ -395,7 +398,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(indexPath: IndexPath) -> TableCellViewModel?
    +
    public subscript(indexPath: IndexPath) -> TableCellViewModel? { get }
    @@ -426,8 +429,8 @@

    Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html index 8065e71..db247a6 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html @@ -76,6 +76,9 @@
  • + @@ -132,7 +135,7 @@

    ViewRegistrationInfo

    -
    public struct ViewRegistrationInfo
    +
    public struct ViewRegistrationInfo : Equatable
    @@ -142,6 +145,60 @@

    ViewRegistrationInfo

      +
    • +
      + + + + reuseIdentifier + +
      +
      +
      +
      +
      +
      +

      The reuse identifier for the view.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public let reuseIdentifier: String
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + registrationMethod + +
      +
      +
      +
      +
      +
      +

      The registration method for the view.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public let registrationMethod: ViewRegistrationMethod
      + +
      +
      +
      +
      +
    • @@ -158,8 +215,8 @@

      ViewRegistrationInfo

      Initializes a new ViewRegistrationInfo for the provided classType.

      Note

      -

      The class name is used for reuseIdentifier. -The registrationMethod is set to .fromClass.

      +

      The class name is used for reuseIdentifier. +The registrationMethod is set to .fromClass.

      @@ -210,8 +267,8 @@

      Parameters

      Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

      Note

      -

      The class name is used for reuseIdentifier. -The registrationMethod is set to .fromNib using the provided nibName and bundle.

      +

      The class name is used for reuseIdentifier. +The registrationMethod is set to .fromNib using the provided nibName and bundle.

      @@ -275,8 +332,8 @@

      Parameters

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html index f370eb0..db9706d 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html @@ -10,6 +10,7 @@ +
    @@ -75,6 +76,9 @@ + @@ -167,8 +171,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html index 73ab1f7..3890a11 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html @@ -75,6 +75,9 @@ + @@ -159,18 +162,18 @@

    Example

    // Given a view controller with a table view
     
     // 1. create cell models
    -let cell0 = ExampleTableCellModel(...)
    -let cell1 = ExampleTableCellModel(...)
    -let cell2 = ExampleTableCellModel(...)
    +let cell0 = ExampleTableCellModel(...)
    +let cell1 = ExampleTableCellModel(...)
    +let cell2 = ExampleTableCellModel(...)
     
     // 2. create section models
    -let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
    +let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
     
     // 3. create table model
    -let tableModel = TableViewModel(sectionModels: [section0])
    +let tableModel = TableViewModel(sectionModels: [section0])
     
     // 4. create driver
    -self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
    +self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
     
     // 5. update driver with new table model as it changes
     let updatedTableModel = self.doSomethingToChangeModels()
    @@ -183,12 +186,12 @@ 

    Detailed Example

    The following is a more detailed example, to see how this is all integrated into your code. To get set up, you first need to add a Driver (either a TableViewDriver or CollectionViewDriver) to your view controller:

    -
    struct Person {
    +
    struct Person {
       let name: String
    -  let uuid = UUID()
    +  let uuid = UUID()
     }
     
    -final class PersonViewController: UITableViewController {
    +final class PersonViewController: UITableViewController {
         var people: [Person]
         var tableViewDriver: TableViewDriver?
                       .
    @@ -197,8 +200,8 @@ 

    Detailed Example

    override func viewDidLoad() { super.viewDidLoad() // Initialize our `TableViewDriver` with our tableView - self.tableViewDriver = TableViewDriver(tableView: self.tableView) - self.people = [Person(name: "Tom")] + self.tableViewDriver = TableViewDriver(tableView: self.tableView) + self.people = [Person(name: "Tom")] } }
    @@ -213,13 +216,13 @@

    Detailed Example

    Great! But how do you make that TableViewModel? We recommend having a static function that takes in new data and generates the TableViewModel. It might look something like this:

    /// Given a new set of [Person], generates the `TableViewModel` representing that new data
    -static func viewModel(forState people: [Person]) -> TableViewModel { ... }
    +static func viewModel(forState people: [Person]) -> TableViewModel { ... }
     
     

    Then any time your data (in this case the people property) changes, you can generate your new TableViewModel

    var people: [Person] = [] {
    -    didSet {
    +    didSet {
             self.tableViewDriver?.tableViewModel = PersonViewController.viewModel(
                 forState: people
             )
    @@ -230,16 +233,16 @@ 

    Detailed Example

    Okay now lets go back and fill in our viewModel(forState:) function:

    /// Given a new set of [Person], generates the `TableViewModel` representing that new data
    -extension PersonViewController {
    -    static func viewModel(forState people: [Person]) -> TableViewModel {
    -            let personCellViewModels = people.map { PersonCellModel(person: $0) }
    -            let section = TableSectionViewModel(
    +extension PersonViewController {
    +    static func viewModel(forState people: [Person]) -> TableViewModel {
    +            let personCellViewModels = people.map { PersonCellModel(person: $0) }
    +            let section = TableSectionViewModel(
                   headerTitle: "People",
                   headerHeight: 44,
                   cellViewModels: personCellViewModels,
                   diffingKey: "People" // a unique string for automatically diffing
                 )
    -        return TableViewModel(sectionModels: [section])
    +        return TableViewModel(sectionModels: [section])
         }
     }
     
    @@ -251,10 +254,10 @@ 

    Detailed Example

    Now all we have to do is to define PersonCellModel:

    
    -final class PersonCell: UITableViewCell { }
    +final class PersonCell: UITableViewCell { }
     
    -struct PersonCellModel: TableCellViewModel, DiffableViewModel {
    -    var registrationInfo = ViewRegistrationInfo(classType: PersonCell.self)
    +struct PersonCellModel: TableCellViewModel, DiffableViewModel {
    +    var registrationInfo = ViewRegistrationInfo(classType: PersonCell.self)
         var accessibilityFormat: CellAccessibilityFormat = "PersonUserCell"
         let cellIdentifier = "PersonUserCell"
         let editingStyle: UITableViewCellEditingStyle = .delete
    @@ -271,7 +274,7 @@ 

    Detailed Example

    // If we want the library to automatically reload when new data is available // each cell model needs to have a unique key for the diffing algorithm to work. // In this case we just use the person's uuid - var diffingKey: String { + var diffingKey: String { return self.person.uuid.uuidString } } @@ -288,8 +291,8 @@

    Detailed Example

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html index 3254e32..9ee7713 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html @@ -75,6 +75,9 @@ + @@ -135,7 +138,7 @@

    Build Status Version Status license MIT codecov Platform

    -

    ReactiveLists provides a React-like API for UITableView and UICollectionView that makes it easy to write stateless code that generates user interfaces.

    +

    ReactiveLists provides a React-like API for UITableView and UICollectionView that makes it easy to write stateless code that generates user interfaces.

    In our experience this can make UI code significantly easier to read and maintain. Instead of spreading the definition of your content over various data source methods, you can define the content concisely. The table or collection content and layout are immediately obvious by scanning over the source code.

    @@ -150,18 +153,18 @@

    Example

    // Given a view controller with a table view
     
     // 1. create cell models
    -let cell0 = ExampleTableCellModel(...)
    -let cell1 = ExampleTableCellModel(...)
    -let cell2 = ExampleTableCellModel(...)
    +let cell0 = ExampleTableCellModel(...)
    +let cell1 = ExampleTableCellModel(...)
    +let cell2 = ExampleTableCellModel(...)
     
     // 2. create section models
    -let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
    +let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
     
     // 3. create table model
    -let tableModel = TableViewModel(sectionModels: [section0])
    +let tableModel = TableViewModel(sectionModels: [section0])
     
     // 4. create driver
    -self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
    +self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
     
     // 5. update driver with new table model as it changes
     let updatedTableModel = self.doSomethingToChangeModels()
    @@ -203,15 +206,15 @@ 

    Generating docs

    Requirements

      -
    • Xcode 9+
    • -
    • Swift 4.0+
    • +
    • Xcode 9.4+
    • +
    • Swift 4.1+
    • iOS 9+

    Installation

    - +
    use_frameworks!
     
    -# For latest release in cocoapods
    +# For latest release in CocoaPods
     pod 'ReactiveLists'
     
     # Latest on master branch
    @@ -231,8 +234,8 @@ 

    License

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/search.json b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/search.json index 19cfcd0..d2efdd3 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:13ReactiveLists10DiffingKeya":{"name":"DiffingKey","abstract":"

    Unique identifier for a DiffableView

    "},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKeySSSgv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0c13SupplementaryeF0_pSg06headereF0AH06footereF0SSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:diffingKey:)","abstract":"

    Initializes a collection view section view model.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV13sectionModelsSayAA0c7SectiondE0VGv":{"name":"sectionModels","abstract":"

    The section view models for this collection view.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVACSayAA0c7SectiondE0VG13sectionModels_tcfc":{"name":"init(sectionModels:)","abstract":"

    Initializes a collection view model with the sections provided.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV9subscriptAA0c7SectiondE0VSgSici":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV9subscriptAA0c4CelldE0_pSg10Foundation9IndexPathVci":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"CollectionViewModel"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV012registrationE0AA0d12RegistrationE0Vv":{"name":"registrationInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV4kindAA0cD4KindOv":{"name":"kind","abstract":"

    The kind of supplementary view (e.g. header or footer)

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV19accessibilityFormatAA0c13AccessibilityG0Vv":{"name":"accessibilityFormat","abstract":"

    TableViewDataSource and CollectionViewDataSource will automatically apply","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoVAcA0d12RegistrationE0V012registrationE0_AA0cD4KindO4kindAA0C19AccessibilityFormatV013accessibilityK0tcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV18sectionIndexTitlesSaySSGSgv":{"name":"sectionIndexTitles","abstract":"

    The section index titles for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV13sectionModelsSayAA0c7SectiondE0VGv":{"name":"sectionModels","abstract":"

    The section view models for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV7isEmptySbv":{"name":"isEmpty","abstract":"

    Returns true if this table has no sections or has a single empty section.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c4CelldE0_pG04cellD6Models_tcfc":{"name":"init(cellViewModels:)","abstract":"

    Initializes a table view model with one section and the cell models provided","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c7SectiondE0VG13sectionModels_SaySSGSg0G11IndexTitlestcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

    Initializes a table view model with the sections provided.","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV9subscriptAA0c7SectiondE0VSgSici":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV9subscriptAA0c4CelldE0_pSg10Foundation9IndexPathVci":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"TableViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV04cellE6ModelsSayAA0c4CelleF0_pGv":{"name":"cellViewModels","abstract":"

    Cells to be shown in this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06headereF0AA0cd12HeaderFootereF0_pSgv":{"name":"headerViewModel","abstract":"

    View model for the header of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06footereF0AA0cd12HeaderFootereF0_pSgv":{"name":"footerViewModel","abstract":"

    View model for the footer of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV9collapsedSbv":{"name":"collapsed","abstract":"

    Indicates whether or not this section is collapsed.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV10diffingKeySSSgv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV7isEmptySbv":{"name":"isEmpty","abstract":"

    Returns true is the section is empty, false otherwise.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0cd12HeaderFootereF0_pSg06headereF0AH06footereF0Sb9collapsedSSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:collapsed:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSSSg11headerTitle_12CoreGraphics7CGFloatVSg0G6HeightSayAA0c4CelleF0_pG04cellE6ModelsAD06footerH0AI0pL0AD10diffingKeytcfc":{"name":"init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_SS7nibNameSo6BundleCSg6bundletcfc":{"name":"init(classType:nibName:bundle:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html":{"name":"ViewRegistrationInfo","abstract":"

    Describes the registration information for a cell or supplementary view.

    "},"Structs/TableSectionViewModel.html":{"name":"TableSectionViewModel","abstract":"

    View model for a table view section.

    "},"Structs/TableViewModel.html":{"name":"TableViewModel","abstract":"

    The view model that describes a UITableView.

    "},"Structs/SupplementaryViewInfo.html":{"name":"SupplementaryViewInfo","abstract":"

    Metadata thats required for setting up a supplementary view.

    "},"Structs/CollectionViewModel.html":{"name":"CollectionViewModel","abstract":"

    The view model that describes a UICollectionView.

    "},"Structs/CollectionSectionViewModel.html":{"name":"CollectionSectionViewModel","abstract":"

    View model for a collection view section.

    "},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP8viewInfoAA0deH0VSgv":{"name":"viewInfo","abstract":"

    Metadata for this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP6height12CoreGraphics7CGFloatVSgv":{"name":"height","abstract":"

    Height of this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0ySo020UICollectionReusableE0CF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the supplementary view model to update the UICollectionReusableView with the content","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vv":{"name":"accessibilityFormat","abstract":"

    CollectionViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP15shouldHighlightSbv":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP9didSelectyycSgv":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP11didDeselectyycSgv":{"name":"didDeselect","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0ySo012UICollectioneD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UICollectionViewCell with the content","parent_name":"CollectionCellViewModel"},"Protocols/ReusableSupplementaryViewModelProtocol.html#/s:13ReactiveLists38ReusableSupplementaryViewModelProtocolP8viewInfoAA0deI0VSgv":{"name":"viewInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"ReusableSupplementaryViewModelProtocol"},"Protocols/ReusableCellViewModelProtocol.html#/s:13ReactiveLists29ReusableCellViewModelProtocolP16registrationInfoAA0e12RegistrationI0Vv":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellViewModelProtocol"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP5titleSSSgv":{"name":"title","abstract":"

    The title of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP6height12CoreGraphics7CGFloatVSgv":{"name":"height","abstract":"

    The height of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0ySo6UIViewCF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the view model to update the header/footer","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableViewCellModelEditActions.html#/s:13ReactiveLists29TableViewCellModelEditActionsP04editH0SaySo07UITableD9RowActionCGv":{"name":"editActions","abstract":"

    The row edit actions for the cell.

    ","parent_name":"TableViewCellModelEditActions"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vv":{"name":"accessibilityFormat","abstract":"

    TableViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVv":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSC07UITableed7EditingH0Ov":{"name":"editingStyle","abstract":"

    The editing style for this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP15shouldHighlightSbv":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP24shouldIndentWhileEditingSbv":{"name":"shouldIndentWhileEditing","abstract":"

    Whether or not this cell should be indented while editing.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP16willBeginEditingyycSgv":{"name":"willBeginEditing","abstract":"

    Invoked when a cell will begin being edited.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP13didEndEditingyycSgv":{"name":"didEndEditing","abstract":"

    Invoked when cell editing has ended.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP18commitEditingStyleySC07UITableedhI0OcSgv":{"name":"commitEditingStyle","abstract":"

    Asks the cell to commit the insertion/deletion.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9didSelectyycSgv":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP21accessoryButtonTappedyycSgv":{"name":"accessoryButtonTapped","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP05applyef2ToD0ySo07UITableeD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UITableViewCell with the content","parent_name":"TableCellViewModel"},"Protocols/DiffableViewModel.html#/s:13ReactiveLists17DiffableViewModelP10diffingKeySSv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify an element.","parent_name":"DiffableViewModel"},"Protocols/DiffableViewModel.html":{"name":"DiffableViewModel","abstract":"

    A view model that can participate in an automatic diffing algorithm.

    "},"Protocols/TableCellViewModel.html":{"name":"TableCellViewModel","abstract":"

    View model for the individual cells of a TableViewModel.

    "},"Protocols/TableViewCellModelEditActions.html":{"name":"TableViewCellModelEditActions","abstract":"

    Protocol that needs to be implemented by table view cell view models"},"Protocols/TableSectionHeaderFooterViewModel.html":{"name":"TableSectionHeaderFooterViewModel","abstract":"

    Protocol that needs to be implemented by custom header"},"Protocols/ReusableCellViewModelProtocol.html":{"name":"ReusableCellViewModelProtocol","abstract":"

    Describes a cell view model."},"Protocols/ReusableSupplementaryViewModelProtocol.html":{"name":"ReusableSupplementaryViewModelProtocol","abstract":"

    Describes a supplementary view model."},"Protocols/CollectionCellViewModel.html":{"name":"CollectionCellViewModel","abstract":"

    View model for the individual cells of a UICollectionView.

    "},"Protocols/CollectionSupplementaryViewModel.html":{"name":"CollectionSupplementaryViewModel","abstract":"

    View model for supplementary views in collection views.

    "},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6headerA2CmF":{"name":"header","abstract":"

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footerA2CmF":{"name":"footer","abstract":"

    A footer view.

    ","parent_name":"SupplementaryViewKind"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO9fromClassACyXlXpcACmF":{"name":"fromClass","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibACSS4name_So6BundleCSg6bundletcACmF":{"name":"fromNib","abstract":"

    Nib-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html":{"name":"ViewRegistrationMethod","abstract":"

    The method for registering cells and supplementary views

    "},"Enums/SupplementaryViewKind.html":{"name":"SupplementaryViewKind","abstract":"

    Defines the kind of a supplementary view.

    "},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD0So012UICollectionD0Cv":{"name":"collectionView","abstract":"

    The collection view to which the CollectionViewModel is rendered.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD5ModelAA0cdG0VSgv":{"name":"collectionViewModel","abstract":"

    Describes the current UI state of the collection view.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC23automaticDiffingEnabledSbv":{"name":"automaticDiffingEnabled","abstract":"

    If this property is set to true, updating the collectionViewModel will always","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverCACSo012UICollectionD0C010collectionD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(collectionView:collectionViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UICollectionView based on a CollectionViewModel.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC12refreshViewsyyF":{"name":"refreshViews()","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"CollectionViewDriver"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownA2EmF":{"name":"unknown","abstract":"

    A refresh was requested, but we don’t know if rows/sections are being added/removed

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyA2EmF":{"name":"contentOnly","abstract":"

    Only the content of cells is being refreshed. No rows/sections will be added/deleted.

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedA2EmF":{"name":"rowsModified","abstract":"

    Rows/sections are being added/deleted

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html":{"name":"TableRefreshContext","abstract":"

    Communicates information for refreshing the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD0So07UITableD0Cv":{"name":"tableView","abstract":"

    The table view to which the TableViewModel is rendered.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD5ModelAA0cdG0VSgv":{"name":"tableViewModel","abstract":"

    Describes the current UI state of the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverCACSo07UITableD0C05tableD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(tableView:tableViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UITableView based on a TableViewModel.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC12refreshViewsyAC0C14RefreshContextO0fI0_tF":{"name":"refreshViews(refreshContext:)","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html":{"name":"TableViewDriver","abstract":"

    A data source that drives the table views appereance and behavior based on an underlying"},"Classes/CollectionViewDriver.html":{"name":"CollectionViewDriver","abstract":"

    A data source that drives the collection views appereance and behavior based on an underlying"},"getting-started.html":{"name":"Getting Started"},"vision.html":{"name":"VISION"},"Guides.html":{"name":"Guides","abstract":"

    The following guides are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file +{"Typealiases.html#/s:13ReactiveLists10DiffingKeya":{"name":"DiffingKey","abstract":"

    Unique identifier for a DiffableView

    "},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    The reuse identifier for the view.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV18registrationMethodAA0cdG0Ovp":{"name":"registrationMethod","abstract":"

    The registration method for the view.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_SS7nibNameSo6BundleCSg6bundletcfc":{"name":"init(classType:nibName:bundle:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

    ","parent_name":"ViewRegistrationInfo"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV18sectionIndexTitlesSaySSGSgvp":{"name":"sectionIndexTitles","abstract":"

    The section index titles for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV13sectionModelsSayAA0c7SectiondE0VGvp":{"name":"sectionModels","abstract":"

    The section view models for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this table has no sections or has a single empty section.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c4CelldE0_pG04cellD6Models_tcfc":{"name":"init(cellViewModels:)","abstract":"

    Initializes a table view model with one section and the cell models provided","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c7SectiondE0VG13sectionModels_SaySSGSg0G11IndexTitlestcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

    Initializes a table view model with the sections provided.","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVAA0c7SectiondE0VSgSicip":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVAA0c4CelldE0_pSg10Foundation9IndexPathVcip":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"TableViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV04cellE6ModelsSayAA0c4CelleF0_pGvp":{"name":"cellViewModels","abstract":"

    Cells to be shown in this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06headereF0AA0cd12HeaderFootereF0_pSgvp":{"name":"headerViewModel","abstract":"

    View model for the header of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06footereF0AA0cd12HeaderFootereF0_pSgvp":{"name":"footerViewModel","abstract":"

    View model for the footer of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV9collapsedSbvp":{"name":"collapsed","abstract":"

    Indicates whether or not this section is collapsed.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV10diffingKeySSSgvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true is the section is empty, false otherwise.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0cd12HeaderFootereF0_pSg06headereF0AH06footereF0Sb9collapsedSSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:collapsed:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSSSg11headerTitle_12CoreGraphics7CGFloatVSg0G6HeightSayAA0c4CelleF0_pG04cellE6ModelsAD06footerH0AI0pL0AD10diffingKeytcfc":{"name":"init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV012registrationE0AA0d12RegistrationE0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV4kindAA0cD4KindOvp":{"name":"kind","abstract":"

    The kind of supplementary view (e.g. header or footer)

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV19accessibilityFormatAA0c13AccessibilityG0Vvp":{"name":"accessibilityFormat","abstract":"

    TableViewDataSource and CollectionViewDataSource will automatically apply","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoVAcA0d12RegistrationE0V012registrationE0_AA0cD4KindO4kindAA0C19AccessibilityFormatV013accessibilityK0tcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKeySSSgvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0c13SupplementaryeF0_pSg06headereF0AH06footereF0SSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:diffingKey:)","abstract":"

    Initializes a collection view section view model.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV13sectionModelsSayAA0c7SectiondE0VGvp":{"name":"sectionModels","abstract":"

    The section view models for this collection view.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVACSayAA0c7SectiondE0VG13sectionModels_tcfc":{"name":"init(sectionModels:)","abstract":"

    Initializes a collection view model with the sections provided.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVAA0c7SectiondE0VSgSicip":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVAA0c4CelldE0_pSg10Foundation9IndexPathVcip":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html":{"name":"CollectionViewModel","abstract":"

    The view model that describes a UICollectionView.

    "},"Structs/CollectionSectionViewModel.html":{"name":"CollectionSectionViewModel","abstract":"

    View model for a collection view section.

    "},"Structs/SupplementaryViewInfo.html":{"name":"SupplementaryViewInfo","abstract":"

    Metadata thats required for setting up a supplementary view.

    "},"Structs/TableSectionViewModel.html":{"name":"TableSectionViewModel","abstract":"

    View model for a table view section.

    "},"Structs/TableViewModel.html":{"name":"TableViewModel","abstract":"

    The view model that describes a UITableView.

    "},"Structs/ViewRegistrationInfo.html":{"name":"ViewRegistrationInfo","abstract":"

    Describes the registration information for a cell or supplementary view.

    "},"Protocols/ReusableCellProtocol.html#/s:13ReactiveLists20ReusableCellProtocolP16registrationInfoAA016ViewRegistrationG0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellProtocol"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP5titleSSSgvp":{"name":"title","abstract":"

    The title of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP6height12CoreGraphics7CGFloatVSgvp":{"name":"height","abstract":"

    The height of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0ySo6UIViewCF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the view model to update the header/footer","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableViewCellModelEditActions.html#/s:13ReactiveLists29TableViewCellModelEditActionsP04editH0SaySo07UITableD9RowActionCGvp":{"name":"editActions","abstract":"

    The row edit actions for the cell.

    ","parent_name":"TableViewCellModelEditActions"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vvp":{"name":"accessibilityFormat","abstract":"

    TableViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVvp":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSC07UITableed7EditingH0Ovp":{"name":"editingStyle","abstract":"

    The editing style for this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP15shouldHighlightSbvp":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP24shouldIndentWhileEditingSbvp":{"name":"shouldIndentWhileEditing","abstract":"

    Whether or not this cell should be indented while editing.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP16willBeginEditingyycSgvp":{"name":"willBeginEditing","abstract":"

    Invoked when a cell will begin being edited.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP13didEndEditingyycSgvp":{"name":"didEndEditing","abstract":"

    Invoked when cell editing has ended.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP18commitEditingStyleySC07UITableedhI0OcSgvp":{"name":"commitEditingStyle","abstract":"

    Asks the cell to commit the insertion/deletion.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9didSelectyycSgvp":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP21accessoryButtonTappedyycSgvp":{"name":"accessoryButtonTapped","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP05applyef2ToD0ySo07UITableeD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UITableViewCell with the content","parent_name":"TableCellViewModel"},"Protocols/ReusableSupplementaryViewModelProtocol.html#/s:13ReactiveLists38ReusableSupplementaryViewModelProtocolP8viewInfoAA0deI0VSgvp":{"name":"viewInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"ReusableSupplementaryViewModelProtocol"},"Protocols/ReusableCellViewModelProtocol.html#/s:13ReactiveLists29ReusableCellViewModelProtocolP16registrationInfoAA0e12RegistrationI0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellViewModelProtocol"},"Protocols/DiffableViewModel.html#/s:13ReactiveLists17DiffableViewModelP10diffingKeySSvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify an element.","parent_name":"DiffableViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP8viewInfoAA0deH0VSgvp":{"name":"viewInfo","abstract":"

    Metadata for this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP6height12CoreGraphics7CGFloatVSgvp":{"name":"height","abstract":"

    Height of this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0ySo020UICollectionReusableE0CF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the supplementary view model to update the UICollectionReusableView with the content","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vvp":{"name":"accessibilityFormat","abstract":"

    CollectionViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP15shouldHighlightSbvp":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP9didSelectyycSgvp":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP11didDeselectyycSgvp":{"name":"didDeselect","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0ySo012UICollectioneD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UICollectionViewCell with the content","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html":{"name":"CollectionCellViewModel","abstract":"

    View model for the individual cells of a UICollectionView.

    "},"Protocols/CollectionSupplementaryViewModel.html":{"name":"CollectionSupplementaryViewModel","abstract":"

    View model for supplementary views in collection views.

    "},"Protocols/DiffableViewModel.html":{"name":"DiffableViewModel","abstract":"

    A view model that can participate in an automatic diffing algorithm.

    "},"Protocols/ReusableCellViewModelProtocol.html":{"name":"ReusableCellViewModelProtocol","abstract":"

    Describes a cell view model."},"Protocols/ReusableSupplementaryViewModelProtocol.html":{"name":"ReusableSupplementaryViewModelProtocol","abstract":"

    Describes a supplementary view model."},"Protocols/TableCellViewModel.html":{"name":"TableCellViewModel","abstract":"

    View model for the individual cells of a TableViewModel.

    "},"Protocols/TableViewCellModelEditActions.html":{"name":"TableViewCellModelEditActions","abstract":"

    Protocol that needs to be implemented by table view cell view models"},"Protocols/TableSectionHeaderFooterViewModel.html":{"name":"TableSectionHeaderFooterViewModel","abstract":"

    Protocol that needs to be implemented by custom header"},"Protocols/ReusableCellProtocol.html":{"name":"ReusableCellProtocol","abstract":"

    Describes a reusable cell and specifies how to register it.

    "},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO9fromClassACyXlXpcACmF":{"name":"fromClass","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibACSS4name_So6BundleCSg6bundletcACmF":{"name":"fromNib","abstract":"

    Nib-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"ViewRegistrationMethod"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6headerA2CmF":{"name":"header","abstract":"

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footerA2CmF":{"name":"footer","abstract":"

    A footer view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html":{"name":"SupplementaryViewKind","abstract":"

    Defines the kind of a supplementary view.

    "},"Enums/ViewRegistrationMethod.html":{"name":"ViewRegistrationMethod","abstract":"

    The method for registering cells and supplementary views

    "},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownA2EmF":{"name":"unknown","abstract":"

    A refresh was requested, but we don’t know if rows/sections are being added/removed

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyA2EmF":{"name":"contentOnly","abstract":"

    Only the content of cells is being refreshed. No rows/sections will be added/deleted.

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedA2EmF":{"name":"rowsModified","abstract":"

    Rows/sections are being added/deleted

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html":{"name":"TableRefreshContext","abstract":"

    Communicates information for refreshing the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD0So07UITableD0Cvp":{"name":"tableView","abstract":"

    The table view to which the TableViewModel is rendered.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD5ModelAA0cdG0VSgvp":{"name":"tableViewModel","abstract":"

    Describes the current UI state of the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC18insertionAnimationSC07UITabled3RowG0Ovp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC17deletionAnimationSC07UITabled3RowG0Ovp":{"name":"deletionAnimation","abstract":"

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverCACSo07UITableD0C05tableD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(tableView:tableViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UITableView based on a TableViewModel.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC12refreshViewsyAC0C14RefreshContextO0fI0_tF":{"name":"refreshViews(refreshContext:)","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"TableViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD0So012UICollectionD0Cvp":{"name":"collectionView","abstract":"

    The collection view to which the CollectionViewModel is rendered.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD5ModelAA0cdG0VSgvp":{"name":"collectionViewModel","abstract":"

    Describes the current UI state of the collection view.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC23automaticDiffingEnabledSbvp":{"name":"automaticDiffingEnabled","abstract":"

    If this property is set to true, updating the collectionViewModel will always","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverCACSo012UICollectionD0C010collectionD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(collectionView:collectionViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UICollectionView based on a CollectionViewModel.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC12refreshViewsyyF":{"name":"refreshViews()","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html":{"name":"CollectionViewDriver","abstract":"

    A data source that drives the collection views appereance and behavior based on an underlying"},"Classes/TableViewDriver.html":{"name":"TableViewDriver","abstract":"

    A data source that drives the table views appereance and behavior based on an underlying"},"getting-started.html":{"name":"Getting Started"},"vision.html":{"name":"VISION"},"Guides.html":{"name":"Guides","abstract":"

    The following guides are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html index 4bd964e..743d4d5 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html @@ -75,6 +75,9 @@ + @@ -152,8 +155,8 @@

    Vision

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/docSet.dsidx b/docs/docsets/ReactiveLists.docset/Contents/Resources/docSet.dsidx index 3df00e2325c764673d91a21a8dedba029692f4b9..608b56e7ddd7053ecb77f15a297026c771d519d3 100644 GIT binary patch delta 5342 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 VrOgdT#==Mj<+Q~*wm5(j{sp4gisAqO diff --git a/docs/docsets/ReactiveLists.tgz b/docs/docsets/ReactiveLists.tgz index a5a954866734029b1d51826c50165673fa4ff01e..09d7f814aae0d6cd8c5bbe1421c5a3bac897e4cf 100644 GIT binary patch literal 77349 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

    Qaxh&Ck_EGj?a(zch46 z3_s*YW_=ww=~$uS=E}sgE6VE;aVwu!f#1)I7XHOTT&9G&qhvbvErb_Arljm}PDwtD zUWVI#;y%|}blAM#92hrZpt%Y#=X#p#R8(`xm?Yf_RHbRs@>%5pujX(V;!Ld;Y?JNl zH>-Hk47x#Z0cHkPqj^47SYkbmd&U+Y9V+Nau+S>!lM@L}0z#`|ZM%E7FGb9*T#kJo zzAe)enx62DbvnFCP^c|$Sw{25-5|J@>2d|6pB+g>r3oH0NGC&rf!2UmN%FJTSv9m& zFWlh?Il3;f_94ANa7E)Ea9mRs*d}p>`mCp` z-&4rVx`YkvLol3i*tecE@KfJmkS=@+0-L|W;f;|e&hU&q!)&U~KjY%=1d&>*fz#<| z1X5f!CoL1xbx<(N83(>)!hP2aeTOadLP_JGnw*H|1Eu1k#{!lU9XAdCth!mAy>y?s zlC$mQL?w(VZC;&4AN(Av@7h}HW^S{1bvhSimJK77i3b`)+Ss~gZDOt73-i^_B?Ttw zSw&z=uSqN|hQjZDvs(8c;}k&Yyszs^Gn;hv1paO5`qn&+?nHOXXAQZpHd{MvLo)&k z{PKb)QRxhJ{> wBe#;zZ|by187C@v}KOBy{*>fmw8I$aY#%8VpyxB!U#!~X19+t zMya&I2El6Tm6PC$wXM+kCUwj81AAV*j<+1JVQ<3UQa(=%dJxpyeq0G%0`z}=aD!$` zeR*8ZN%@8TM?8*_UsN_+t@(gUNjlX3BB#e68N504LqW#(Pt}-*?p-0OGc>ZFDf!g4 znfe@J63S15a1I_h(Pzk0cqeA$7?6tMFkf9s*;KR1%_$M} zpJB%*#O(h3yVH&~1LD5I;>YFz=s;)&lFTUwv`JrAknO5UrK2k2{ziMP=6o17da$Sp z3(^BMan&r!z>|=n7|8wiIpCQxKDc~<(yqYPh9{Xt!WZQBGEA% z2B9t=-zc8^*Tbw*Uc|8w-^J*H*}+jv-x%s=71#mBK7q#hn!e?%c)gcXBOlohy;qbL zh7F*&y7MPE^zTM_+<%2y$;(kccfF&HGtj(Y=zkJmqTWK=-bzZkpwO2~N}t^!D&P6`4mbX{%RfE$Zo_xaczs9lU)_K3Mq}vv>Z+h09=@+glf~YP6aF9z9xtZ$ znW^mitUyU4z}st@XH?v=wSuFZ}7GRKuG4D=T)&n zZCy1GmS-BK!r@jXKn(9JRILzn2DOKQJ?sj4O4({G%{8I}gB0 z3+1Pg(JqO~fA^rvp9hl?^yhU0Fp%p7-I-D0aT!_@j7SX8tmf3hCLhP-Ts@gxJ=vt)x^wOgmW>DBE9Jlhm>5(A56+mtH{>4*^)}7bxI@hv4J7441x4ifx_AQVj9U z60{#SH;Vu+xMFMI3aR~m5JCu%+*dF>**bff3Dt87FkFXT2^=dlO*Gyd9!>|zTRugv z;mQNUiaINE=rg`}B*fW)5zI?UC`I1uHz2q^#@$PwrT{9z^KOwiacJAa2v<$-#3R3! z-6d6A>Dr&OZp7Mk;<%l~NChb{)3PWm4*Dcp@}_hz%u`#Iv06 zJp7Ia8I&q$nO7zyX>p1+5Rhlf^xw^4ZSlHmc|*?wX7lk~KwYc__+6v^LD5|*|3*R9 ztKW}>|2_>g$9rc*3_8`JDCrN)Y01kQuXTL=Pg=*DxX12FD^&eLQ<+WO0KALh3eF4! zrif3owteVOGLmez#5;9CZ;i8Avn0&(UR6FMcg1gw>XcgYAZ*3)sg?IX6TpNBcS=9} z`8O@PFX_rIhywxn$vmVo&z$sT9Fn^*v|9Ow8zlf`AJVO6L@x|(Np9I&=?x=|G>qhG ze#jSi&o3SF9szHKt^`_#GNX;~{Nx`>Pi90^nx*5myc=Lw!Y)VbQ4Rj&qUBt|wsRW(3>V zL8WEAL11C;7LX)(;qYt?a)KRV0CC_&DBLt9SYo}&@2+J1wHk53TpA541}3XYZy-LO zRs%gyT$hK}6mi1V<#2sl+4;w9fHKa_S-W01&q4()alwk_rntJPGU~VgXPe@^et|Yi Ln%2QEpu+q=`oyyh diff --git a/docs/getting-started.html b/docs/getting-started.html index 73ab1f7..3890a11 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -75,6 +75,9 @@

    + @@ -159,18 +162,18 @@

    Example

    // Given a view controller with a table view
     
     // 1. create cell models
    -let cell0 = ExampleTableCellModel(...)
    -let cell1 = ExampleTableCellModel(...)
    -let cell2 = ExampleTableCellModel(...)
    +let cell0 = ExampleTableCellModel(...)
    +let cell1 = ExampleTableCellModel(...)
    +let cell2 = ExampleTableCellModel(...)
     
     // 2. create section models
    -let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
    +let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
     
     // 3. create table model
    -let tableModel = TableViewModel(sectionModels: [section0])
    +let tableModel = TableViewModel(sectionModels: [section0])
     
     // 4. create driver
    -self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
    +self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
     
     // 5. update driver with new table model as it changes
     let updatedTableModel = self.doSomethingToChangeModels()
    @@ -183,12 +186,12 @@ 

    Detailed Example

    The following is a more detailed example, to see how this is all integrated into your code. To get set up, you first need to add a Driver (either a TableViewDriver or CollectionViewDriver) to your view controller:

    -
    struct Person {
    +
    struct Person {
       let name: String
    -  let uuid = UUID()
    +  let uuid = UUID()
     }
     
    -final class PersonViewController: UITableViewController {
    +final class PersonViewController: UITableViewController {
         var people: [Person]
         var tableViewDriver: TableViewDriver?
                       .
    @@ -197,8 +200,8 @@ 

    Detailed Example

    override func viewDidLoad() { super.viewDidLoad() // Initialize our `TableViewDriver` with our tableView - self.tableViewDriver = TableViewDriver(tableView: self.tableView) - self.people = [Person(name: "Tom")] + self.tableViewDriver = TableViewDriver(tableView: self.tableView) + self.people = [Person(name: "Tom")] } }
    @@ -213,13 +216,13 @@

    Detailed Example

    Great! But how do you make that TableViewModel? We recommend having a static function that takes in new data and generates the TableViewModel. It might look something like this:

    /// Given a new set of [Person], generates the `TableViewModel` representing that new data
    -static func viewModel(forState people: [Person]) -> TableViewModel { ... }
    +static func viewModel(forState people: [Person]) -> TableViewModel { ... }
     
     

    Then any time your data (in this case the people property) changes, you can generate your new TableViewModel

    var people: [Person] = [] {
    -    didSet {
    +    didSet {
             self.tableViewDriver?.tableViewModel = PersonViewController.viewModel(
                 forState: people
             )
    @@ -230,16 +233,16 @@ 

    Detailed Example

    Okay now lets go back and fill in our viewModel(forState:) function:

    /// Given a new set of [Person], generates the `TableViewModel` representing that new data
    -extension PersonViewController {
    -    static func viewModel(forState people: [Person]) -> TableViewModel {
    -            let personCellViewModels = people.map { PersonCellModel(person: $0) }
    -            let section = TableSectionViewModel(
    +extension PersonViewController {
    +    static func viewModel(forState people: [Person]) -> TableViewModel {
    +            let personCellViewModels = people.map { PersonCellModel(person: $0) }
    +            let section = TableSectionViewModel(
                   headerTitle: "People",
                   headerHeight: 44,
                   cellViewModels: personCellViewModels,
                   diffingKey: "People" // a unique string for automatically diffing
                 )
    -        return TableViewModel(sectionModels: [section])
    +        return TableViewModel(sectionModels: [section])
         }
     }
     
    @@ -251,10 +254,10 @@ 

    Detailed Example

    Now all we have to do is to define PersonCellModel:

    
    -final class PersonCell: UITableViewCell { }
    +final class PersonCell: UITableViewCell { }
     
    -struct PersonCellModel: TableCellViewModel, DiffableViewModel {
    -    var registrationInfo = ViewRegistrationInfo(classType: PersonCell.self)
    +struct PersonCellModel: TableCellViewModel, DiffableViewModel {
    +    var registrationInfo = ViewRegistrationInfo(classType: PersonCell.self)
         var accessibilityFormat: CellAccessibilityFormat = "PersonUserCell"
         let cellIdentifier = "PersonUserCell"
         let editingStyle: UITableViewCellEditingStyle = .delete
    @@ -271,7 +274,7 @@ 

    Detailed Example

    // If we want the library to automatically reload when new data is available // each cell model needs to have a unique key for the diffing algorithm to work. // In this case we just use the person's uuid - var diffingKey: String { + var diffingKey: String { return self.person.uuid.uuidString } } @@ -288,8 +291,8 @@

    Detailed Example

    diff --git a/docs/index.html b/docs/index.html index 3254e32..9ee7713 100644 --- a/docs/index.html +++ b/docs/index.html @@ -75,6 +75,9 @@ + @@ -135,7 +138,7 @@

    Build Status Version Status license MIT codecov Platform

    -

    ReactiveLists provides a React-like API for UITableView and UICollectionView that makes it easy to write stateless code that generates user interfaces.

    +

    ReactiveLists provides a React-like API for UITableView and UICollectionView that makes it easy to write stateless code that generates user interfaces.

    In our experience this can make UI code significantly easier to read and maintain. Instead of spreading the definition of your content over various data source methods, you can define the content concisely. The table or collection content and layout are immediately obvious by scanning over the source code.

    @@ -150,18 +153,18 @@

    Example

    // Given a view controller with a table view
     
     // 1. create cell models
    -let cell0 = ExampleTableCellModel(...)
    -let cell1 = ExampleTableCellModel(...)
    -let cell2 = ExampleTableCellModel(...)
    +let cell0 = ExampleTableCellModel(...)
    +let cell1 = ExampleTableCellModel(...)
    +let cell2 = ExampleTableCellModel(...)
     
     // 2. create section models
    -let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
    +let section0 = ExampleTableSectionViewModel(cellViewModels: [cell0, cell1, cell2])
     
     // 3. create table model
    -let tableModel = TableViewModel(sectionModels: [section0])
    +let tableModel = TableViewModel(sectionModels: [section0])
     
     // 4. create driver
    -self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
    +self.driver = TableViewDriver(tableView: self.tableView, tableViewModel: tableModel)
     
     // 5. update driver with new table model as it changes
     let updatedTableModel = self.doSomethingToChangeModels()
    @@ -203,15 +206,15 @@ 

    Generating docs

    Requirements

      -
    • Xcode 9+
    • -
    • Swift 4.0+
    • +
    • Xcode 9.4+
    • +
    • Swift 4.1+
    • iOS 9+

    Installation

    - +
    use_frameworks!
     
    -# For latest release in cocoapods
    +# For latest release in CocoaPods
     pod 'ReactiveLists'
     
     # Latest on master branch
    @@ -231,8 +234,8 @@ 

    License

    diff --git a/docs/search.json b/docs/search.json index 19cfcd0..d2efdd3 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Typealiases.html#/s:13ReactiveLists10DiffingKeya":{"name":"DiffingKey","abstract":"

    Unique identifier for a DiffableView

    "},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKeySSSgv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0c13SupplementaryeF0_pSg06headereF0AH06footereF0SSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:diffingKey:)","abstract":"

    Initializes a collection view section view model.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV13sectionModelsSayAA0c7SectiondE0VGv":{"name":"sectionModels","abstract":"

    The section view models for this collection view.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVACSayAA0c7SectiondE0VG13sectionModels_tcfc":{"name":"init(sectionModels:)","abstract":"

    Initializes a collection view model with the sections provided.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV9subscriptAA0c7SectiondE0VSgSici":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV9subscriptAA0c4CelldE0_pSg10Foundation9IndexPathVci":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"CollectionViewModel"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV012registrationE0AA0d12RegistrationE0Vv":{"name":"registrationInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV4kindAA0cD4KindOv":{"name":"kind","abstract":"

    The kind of supplementary view (e.g. header or footer)

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV19accessibilityFormatAA0c13AccessibilityG0Vv":{"name":"accessibilityFormat","abstract":"

    TableViewDataSource and CollectionViewDataSource will automatically apply","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoVAcA0d12RegistrationE0V012registrationE0_AA0cD4KindO4kindAA0C19AccessibilityFormatV013accessibilityK0tcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV18sectionIndexTitlesSaySSGSgv":{"name":"sectionIndexTitles","abstract":"

    The section index titles for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV13sectionModelsSayAA0c7SectiondE0VGv":{"name":"sectionModels","abstract":"

    The section view models for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV7isEmptySbv":{"name":"isEmpty","abstract":"

    Returns true if this table has no sections or has a single empty section.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c4CelldE0_pG04cellD6Models_tcfc":{"name":"init(cellViewModels:)","abstract":"

    Initializes a table view model with one section and the cell models provided","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c7SectiondE0VG13sectionModels_SaySSGSg0G11IndexTitlestcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

    Initializes a table view model with the sections provided.","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV9subscriptAA0c7SectiondE0VSgSici":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV9subscriptAA0c4CelldE0_pSg10Foundation9IndexPathVci":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"TableViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV04cellE6ModelsSayAA0c4CelleF0_pGv":{"name":"cellViewModels","abstract":"

    Cells to be shown in this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06headereF0AA0cd12HeaderFootereF0_pSgv":{"name":"headerViewModel","abstract":"

    View model for the header of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06footereF0AA0cd12HeaderFootereF0_pSgv":{"name":"footerViewModel","abstract":"

    View model for the footer of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV9collapsedSbv":{"name":"collapsed","abstract":"

    Indicates whether or not this section is collapsed.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV10diffingKeySSSgv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV7isEmptySbv":{"name":"isEmpty","abstract":"

    Returns true is the section is empty, false otherwise.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0cd12HeaderFootereF0_pSg06headereF0AH06footereF0Sb9collapsedSSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:collapsed:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSSSg11headerTitle_12CoreGraphics7CGFloatVSg0G6HeightSayAA0c4CelleF0_pG04cellE6ModelsAD06footerH0AI0pL0AD10diffingKeytcfc":{"name":"init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_SS7nibNameSo6BundleCSg6bundletcfc":{"name":"init(classType:nibName:bundle:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html":{"name":"ViewRegistrationInfo","abstract":"

    Describes the registration information for a cell or supplementary view.

    "},"Structs/TableSectionViewModel.html":{"name":"TableSectionViewModel","abstract":"

    View model for a table view section.

    "},"Structs/TableViewModel.html":{"name":"TableViewModel","abstract":"

    The view model that describes a UITableView.

    "},"Structs/SupplementaryViewInfo.html":{"name":"SupplementaryViewInfo","abstract":"

    Metadata thats required for setting up a supplementary view.

    "},"Structs/CollectionViewModel.html":{"name":"CollectionViewModel","abstract":"

    The view model that describes a UICollectionView.

    "},"Structs/CollectionSectionViewModel.html":{"name":"CollectionSectionViewModel","abstract":"

    View model for a collection view section.

    "},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP8viewInfoAA0deH0VSgv":{"name":"viewInfo","abstract":"

    Metadata for this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP6height12CoreGraphics7CGFloatVSgv":{"name":"height","abstract":"

    Height of this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0ySo020UICollectionReusableE0CF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the supplementary view model to update the UICollectionReusableView with the content","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vv":{"name":"accessibilityFormat","abstract":"

    CollectionViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP15shouldHighlightSbv":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP9didSelectyycSgv":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP11didDeselectyycSgv":{"name":"didDeselect","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0ySo012UICollectioneD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UICollectionViewCell with the content","parent_name":"CollectionCellViewModel"},"Protocols/ReusableSupplementaryViewModelProtocol.html#/s:13ReactiveLists38ReusableSupplementaryViewModelProtocolP8viewInfoAA0deI0VSgv":{"name":"viewInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"ReusableSupplementaryViewModelProtocol"},"Protocols/ReusableCellViewModelProtocol.html#/s:13ReactiveLists29ReusableCellViewModelProtocolP16registrationInfoAA0e12RegistrationI0Vv":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellViewModelProtocol"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP5titleSSSgv":{"name":"title","abstract":"

    The title of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP6height12CoreGraphics7CGFloatVSgv":{"name":"height","abstract":"

    The height of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0ySo6UIViewCF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the view model to update the header/footer","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableViewCellModelEditActions.html#/s:13ReactiveLists29TableViewCellModelEditActionsP04editH0SaySo07UITableD9RowActionCGv":{"name":"editActions","abstract":"

    The row edit actions for the cell.

    ","parent_name":"TableViewCellModelEditActions"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vv":{"name":"accessibilityFormat","abstract":"

    TableViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVv":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSC07UITableed7EditingH0Ov":{"name":"editingStyle","abstract":"

    The editing style for this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP15shouldHighlightSbv":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP24shouldIndentWhileEditingSbv":{"name":"shouldIndentWhileEditing","abstract":"

    Whether or not this cell should be indented while editing.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP16willBeginEditingyycSgv":{"name":"willBeginEditing","abstract":"

    Invoked when a cell will begin being edited.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP13didEndEditingyycSgv":{"name":"didEndEditing","abstract":"

    Invoked when cell editing has ended.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP18commitEditingStyleySC07UITableedhI0OcSgv":{"name":"commitEditingStyle","abstract":"

    Asks the cell to commit the insertion/deletion.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9didSelectyycSgv":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP21accessoryButtonTappedyycSgv":{"name":"accessoryButtonTapped","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP05applyef2ToD0ySo07UITableeD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UITableViewCell with the content","parent_name":"TableCellViewModel"},"Protocols/DiffableViewModel.html#/s:13ReactiveLists17DiffableViewModelP10diffingKeySSv":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify an element.","parent_name":"DiffableViewModel"},"Protocols/DiffableViewModel.html":{"name":"DiffableViewModel","abstract":"

    A view model that can participate in an automatic diffing algorithm.

    "},"Protocols/TableCellViewModel.html":{"name":"TableCellViewModel","abstract":"

    View model for the individual cells of a TableViewModel.

    "},"Protocols/TableViewCellModelEditActions.html":{"name":"TableViewCellModelEditActions","abstract":"

    Protocol that needs to be implemented by table view cell view models"},"Protocols/TableSectionHeaderFooterViewModel.html":{"name":"TableSectionHeaderFooterViewModel","abstract":"

    Protocol that needs to be implemented by custom header"},"Protocols/ReusableCellViewModelProtocol.html":{"name":"ReusableCellViewModelProtocol","abstract":"

    Describes a cell view model."},"Protocols/ReusableSupplementaryViewModelProtocol.html":{"name":"ReusableSupplementaryViewModelProtocol","abstract":"

    Describes a supplementary view model."},"Protocols/CollectionCellViewModel.html":{"name":"CollectionCellViewModel","abstract":"

    View model for the individual cells of a UICollectionView.

    "},"Protocols/CollectionSupplementaryViewModel.html":{"name":"CollectionSupplementaryViewModel","abstract":"

    View model for supplementary views in collection views.

    "},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6headerA2CmF":{"name":"header","abstract":"

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footerA2CmF":{"name":"footer","abstract":"

    A footer view.

    ","parent_name":"SupplementaryViewKind"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO9fromClassACyXlXpcACmF":{"name":"fromClass","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibACSS4name_So6BundleCSg6bundletcACmF":{"name":"fromNib","abstract":"

    Nib-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html":{"name":"ViewRegistrationMethod","abstract":"

    The method for registering cells and supplementary views

    "},"Enums/SupplementaryViewKind.html":{"name":"SupplementaryViewKind","abstract":"

    Defines the kind of a supplementary view.

    "},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD0So012UICollectionD0Cv":{"name":"collectionView","abstract":"

    The collection view to which the CollectionViewModel is rendered.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD5ModelAA0cdG0VSgv":{"name":"collectionViewModel","abstract":"

    Describes the current UI state of the collection view.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC23automaticDiffingEnabledSbv":{"name":"automaticDiffingEnabled","abstract":"

    If this property is set to true, updating the collectionViewModel will always","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverCACSo012UICollectionD0C010collectionD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(collectionView:collectionViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UICollectionView based on a CollectionViewModel.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC12refreshViewsyyF":{"name":"refreshViews()","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"CollectionViewDriver"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownA2EmF":{"name":"unknown","abstract":"

    A refresh was requested, but we don’t know if rows/sections are being added/removed

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyA2EmF":{"name":"contentOnly","abstract":"

    Only the content of cells is being refreshed. No rows/sections will be added/deleted.

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedA2EmF":{"name":"rowsModified","abstract":"

    Rows/sections are being added/deleted

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html":{"name":"TableRefreshContext","abstract":"

    Communicates information for refreshing the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD0So07UITableD0Cv":{"name":"tableView","abstract":"

    The table view to which the TableViewModel is rendered.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD5ModelAA0cdG0VSgv":{"name":"tableViewModel","abstract":"

    Describes the current UI state of the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverCACSo07UITableD0C05tableD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(tableView:tableViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UITableView based on a TableViewModel.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC12refreshViewsyAC0C14RefreshContextO0fI0_tF":{"name":"refreshViews(refreshContext:)","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html":{"name":"TableViewDriver","abstract":"

    A data source that drives the table views appereance and behavior based on an underlying"},"Classes/CollectionViewDriver.html":{"name":"CollectionViewDriver","abstract":"

    A data source that drives the collection views appereance and behavior based on an underlying"},"getting-started.html":{"name":"Getting Started"},"vision.html":{"name":"VISION"},"Guides.html":{"name":"Guides","abstract":"

    The following guides are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file +{"Typealiases.html#/s:13ReactiveLists10DiffingKeya":{"name":"DiffingKey","abstract":"

    Unique identifier for a DiffableView

    "},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    The reuse identifier for the view.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV18registrationMethodAA0cdG0Ovp":{"name":"registrationMethod","abstract":"

    The registration method for the view.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoVACyXlXp9classType_SS7nibNameSo6BundleCSg6bundletcfc":{"name":"init(classType:nibName:bundle:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType, nibName, and bundle.

    ","parent_name":"ViewRegistrationInfo"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV18sectionIndexTitlesSaySSGSgvp":{"name":"sectionIndexTitles","abstract":"

    The section index titles for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV13sectionModelsSayAA0c7SectiondE0VGvp":{"name":"sectionModels","abstract":"

    The section view models for this table view.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this table has no sections or has a single empty section.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c4CelldE0_pG04cellD6Models_tcfc":{"name":"init(cellViewModels:)","abstract":"

    Initializes a table view model with one section and the cell models provided","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVACSayAA0c7SectiondE0VG13sectionModels_SaySSGSg0G11IndexTitlestcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

    Initializes a table view model with the sections provided.","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVAA0c7SectiondE0VSgSicip":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelVAA0c4CelldE0_pSg10Foundation9IndexPathVcip":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"TableViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV04cellE6ModelsSayAA0c4CelleF0_pGvp":{"name":"cellViewModels","abstract":"

    Cells to be shown in this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06headereF0AA0cd12HeaderFootereF0_pSgvp":{"name":"headerViewModel","abstract":"

    View model for the header of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV06footereF0AA0cd12HeaderFootereF0_pSgvp":{"name":"footerViewModel","abstract":"

    View model for the footer of this section.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV9collapsedSbvp":{"name":"collapsed","abstract":"

    Indicates whether or not this section is collapsed.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV10diffingKeySSSgvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true is the section is empty, false otherwise.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0cd12HeaderFootereF0_pSg06headereF0AH06footereF0Sb9collapsedSSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:collapsed:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/TableSectionViewModel.html#/s:13ReactiveLists21TableSectionViewModelVACSSSg11headerTitle_12CoreGraphics7CGFloatVSg0G6HeightSayAA0c4CelleF0_pG04cellE6ModelsAD06footerH0AI0pL0AD10diffingKeytcfc":{"name":"init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:)","abstract":"

    Initializes a TableViewSectionViewModel.

    ","parent_name":"TableSectionViewModel"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV012registrationE0AA0d12RegistrationE0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV4kindAA0cD4KindOvp":{"name":"kind","abstract":"

    The kind of supplementary view (e.g. header or footer)

    ","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoV19accessibilityFormatAA0c13AccessibilityG0Vvp":{"name":"accessibilityFormat","abstract":"

    TableViewDataSource and CollectionViewDataSource will automatically apply","parent_name":"SupplementaryViewInfo"},"Structs/SupplementaryViewInfo.html#/s:13ReactiveLists21SupplementaryViewInfoVAcA0d12RegistrationE0V012registrationE0_AA0cD4KindO4kindAA0C19AccessibilityFormatV013accessibilityK0tcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKeySSSgvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify this section.","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelVACSayAA0c4CelleF0_pG04cellE6Models_AA0c13SupplementaryeF0_pSg06headereF0AH06footereF0SSSg10diffingKeytcfc":{"name":"init(cellViewModels:headerViewModel:footerViewModel:diffingKey:)","abstract":"

    Initializes a collection view section view model.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV13sectionModelsSayAA0c7SectiondE0VGvp":{"name":"sectionModels","abstract":"

    The section view models for this collection view.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVACSayAA0c7SectiondE0VG13sectionModels_tcfc":{"name":"init(sectionModels:)","abstract":"

    Initializes a collection view model with the sections provided.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVAA0c7SectiondE0VSgSicip":{"name":"subscript(_:)","abstract":"

    Returns the section model at the specified index or nil if no such section exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelVAA0c4CelldE0_pSg10Foundation9IndexPathVcip":{"name":"subscript(_:)","abstract":"

    Returns the cell view model at the specified index path or nil if no such cell exists.

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html":{"name":"CollectionViewModel","abstract":"

    The view model that describes a UICollectionView.

    "},"Structs/CollectionSectionViewModel.html":{"name":"CollectionSectionViewModel","abstract":"

    View model for a collection view section.

    "},"Structs/SupplementaryViewInfo.html":{"name":"SupplementaryViewInfo","abstract":"

    Metadata thats required for setting up a supplementary view.

    "},"Structs/TableSectionViewModel.html":{"name":"TableSectionViewModel","abstract":"

    View model for a table view section.

    "},"Structs/TableViewModel.html":{"name":"TableViewModel","abstract":"

    The view model that describes a UITableView.

    "},"Structs/ViewRegistrationInfo.html":{"name":"ViewRegistrationInfo","abstract":"

    Describes the registration information for a cell or supplementary view.

    "},"Protocols/ReusableCellProtocol.html#/s:13ReactiveLists20ReusableCellProtocolP16registrationInfoAA016ViewRegistrationG0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellProtocol"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP5titleSSSgvp":{"name":"title","abstract":"

    The title of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP6height12CoreGraphics7CGFloatVSgvp":{"name":"height","abstract":"

    The height of the header

    ","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableSectionHeaderFooterViewModel.html#/s:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0ySo6UIViewCF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the view model to update the header/footer","parent_name":"TableSectionHeaderFooterViewModel"},"Protocols/TableViewCellModelEditActions.html#/s:13ReactiveLists29TableViewCellModelEditActionsP04editH0SaySo07UITableD9RowActionCGvp":{"name":"editActions","abstract":"

    The row edit actions for the cell.

    ","parent_name":"TableViewCellModelEditActions"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vvp":{"name":"accessibilityFormat","abstract":"

    TableViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVvp":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSC07UITableed7EditingH0Ovp":{"name":"editingStyle","abstract":"

    The editing style for this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP15shouldHighlightSbvp":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP24shouldIndentWhileEditingSbvp":{"name":"shouldIndentWhileEditing","abstract":"

    Whether or not this cell should be indented while editing.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP16willBeginEditingyycSgvp":{"name":"willBeginEditing","abstract":"

    Invoked when a cell will begin being edited.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP13didEndEditingyycSgvp":{"name":"didEndEditing","abstract":"

    Invoked when cell editing has ended.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP18commitEditingStyleySC07UITableedhI0OcSgvp":{"name":"commitEditingStyle","abstract":"

    Asks the cell to commit the insertion/deletion.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP9didSelectyycSgvp":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP21accessoryButtonTappedyycSgvp":{"name":"accessoryButtonTapped","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP05applyef2ToD0ySo07UITableeD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UITableViewCell with the content","parent_name":"TableCellViewModel"},"Protocols/ReusableSupplementaryViewModelProtocol.html#/s:13ReactiveLists38ReusableSupplementaryViewModelProtocolP8viewInfoAA0deI0VSgvp":{"name":"viewInfo","abstract":"

    The registration info for the supplementary view.

    ","parent_name":"ReusableSupplementaryViewModelProtocol"},"Protocols/ReusableCellViewModelProtocol.html#/s:13ReactiveLists29ReusableCellViewModelProtocolP16registrationInfoAA0e12RegistrationI0Vvp":{"name":"registrationInfo","abstract":"

    The registration info for the cell.

    ","parent_name":"ReusableCellViewModelProtocol"},"Protocols/DiffableViewModel.html#/s:13ReactiveLists17DiffableViewModelP10diffingKeySSvp":{"name":"diffingKey","abstract":"

    The key used by the diffing algorithm to uniquely identify an element.","parent_name":"DiffableViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP8viewInfoAA0deH0VSgvp":{"name":"viewInfo","abstract":"

    Metadata for this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP6height12CoreGraphics7CGFloatVSgvp":{"name":"height","abstract":"

    Height of this supplementary view.

    ","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionSupplementaryViewModel.html#/s:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0ySo020UICollectionReusableE0CF":{"name":"applyViewModelToView(_:)","abstract":"

    Asks the supplementary view model to update the UICollectionReusableView with the content","parent_name":"CollectionSupplementaryViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP19accessibilityFormatAA0d13AccessibilityH0Vvp":{"name":"accessibilityFormat","abstract":"

    CollectionViewDriver will automatically apply an accessibilityIdentifier to the cell based on this format

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP15shouldHighlightSbvp":{"name":"shouldHighlight","abstract":"

    Whether or not this cell should be highlighted.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP9didSelectyycSgvp":{"name":"didSelect","abstract":"

    Invoked when a cell has been selected.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP11didDeselectyycSgvp":{"name":"didDeselect","abstract":"

    Invoked when an accessory button is tapped.

    ","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html#/s:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0ySo012UICollectioneD0CF":{"name":"applyViewModelToCell(_:)","abstract":"

    Asks the cell model to update the UICollectionViewCell with the content","parent_name":"CollectionCellViewModel"},"Protocols/CollectionCellViewModel.html":{"name":"CollectionCellViewModel","abstract":"

    View model for the individual cells of a UICollectionView.

    "},"Protocols/CollectionSupplementaryViewModel.html":{"name":"CollectionSupplementaryViewModel","abstract":"

    View model for supplementary views in collection views.

    "},"Protocols/DiffableViewModel.html":{"name":"DiffableViewModel","abstract":"

    A view model that can participate in an automatic diffing algorithm.

    "},"Protocols/ReusableCellViewModelProtocol.html":{"name":"ReusableCellViewModelProtocol","abstract":"

    Describes a cell view model."},"Protocols/ReusableSupplementaryViewModelProtocol.html":{"name":"ReusableSupplementaryViewModelProtocol","abstract":"

    Describes a supplementary view model."},"Protocols/TableCellViewModel.html":{"name":"TableCellViewModel","abstract":"

    View model for the individual cells of a TableViewModel.

    "},"Protocols/TableViewCellModelEditActions.html":{"name":"TableViewCellModelEditActions","abstract":"

    Protocol that needs to be implemented by table view cell view models"},"Protocols/TableSectionHeaderFooterViewModel.html":{"name":"TableSectionHeaderFooterViewModel","abstract":"

    Protocol that needs to be implemented by custom header"},"Protocols/ReusableCellProtocol.html":{"name":"ReusableCellProtocol","abstract":"

    Describes a reusable cell and specifies how to register it.

    "},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO9fromClassACyXlXpcACmF":{"name":"fromClass","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibACSS4name_So6BundleCSg6bundletcACmF":{"name":"fromNib","abstract":"

    Nib-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"ViewRegistrationMethod"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6headerA2CmF":{"name":"header","abstract":"

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footerA2CmF":{"name":"footer","abstract":"

    A footer view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html":{"name":"SupplementaryViewKind","abstract":"

    Defines the kind of a supplementary view.

    "},"Enums/ViewRegistrationMethod.html":{"name":"ViewRegistrationMethod","abstract":"

    The method for registering cells and supplementary views

    "},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownA2EmF":{"name":"unknown","abstract":"

    A refresh was requested, but we don’t know if rows/sections are being added/removed

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyA2EmF":{"name":"contentOnly","abstract":"

    Only the content of cells is being refreshed. No rows/sections will be added/deleted.

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html#/s:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedA2EmF":{"name":"rowsModified","abstract":"

    Rows/sections are being added/deleted

    ","parent_name":"TableRefreshContext"},"Classes/TableViewDriver/TableRefreshContext.html":{"name":"TableRefreshContext","abstract":"

    Communicates information for refreshing the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD0So07UITableD0Cvp":{"name":"tableView","abstract":"

    The table view to which the TableViewModel is rendered.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD5ModelAA0cdG0VSgvp":{"name":"tableViewModel","abstract":"

    Describes the current UI state of the table view.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC18insertionAnimationSC07UITabled3RowG0Ovp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC17deletionAnimationSC07UITabled3RowG0Ovp":{"name":"deletionAnimation","abstract":"

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverCACSo07UITableD0C05tableD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(tableView:tableViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UITableView based on a TableViewModel.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC12refreshViewsyAC0C14RefreshContextO0fI0_tF":{"name":"refreshViews(refreshContext:)","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"TableViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD0So012UICollectionD0Cvp":{"name":"collectionView","abstract":"

    The collection view to which the CollectionViewModel is rendered.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC010collectionD5ModelAA0cdG0VSgvp":{"name":"collectionViewModel","abstract":"

    Describes the current UI state of the collection view.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC23automaticDiffingEnabledSbvp":{"name":"automaticDiffingEnabled","abstract":"

    If this property is set to true, updating the collectionViewModel will always","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverCACSo012UICollectionD0C010collectionD0_AA0cD5ModelVSg0gdH0Sb27shouldDeselectUponSelectionSb23automaticDiffingEnabledtcfc":{"name":"init(collectionView:collectionViewModel:shouldDeselectUponSelection:automaticDiffingEnabled:)","abstract":"

    Initializes a data source that drives a UICollectionView based on a CollectionViewModel.

    ","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html#/s:13ReactiveLists20CollectionViewDriverC12refreshViewsyyF":{"name":"refreshViews()","abstract":"

    Updates all currently visible cells and sections, such that they reflect the latest","parent_name":"CollectionViewDriver"},"Classes/CollectionViewDriver.html":{"name":"CollectionViewDriver","abstract":"

    A data source that drives the collection views appereance and behavior based on an underlying"},"Classes/TableViewDriver.html":{"name":"TableViewDriver","abstract":"

    A data source that drives the table views appereance and behavior based on an underlying"},"getting-started.html":{"name":"Getting Started"},"vision.html":{"name":"VISION"},"Guides.html":{"name":"Guides","abstract":"

    The following guides are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "},"Typealiases.html":{"name":"Type Aliases","abstract":"

    The following type aliases are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index df14d83..c4b8b30 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -2,5 +2,5 @@ "warnings": [ ], - "source_directory": "/Users/anayini/oss/ReactiveLists" + "source_directory": "/Users/jsquires/Develop/ReactiveLists" } \ No newline at end of file diff --git a/docs/vision.html b/docs/vision.html index 4bd964e..743d4d5 100644 --- a/docs/vision.html +++ b/docs/vision.html @@ -75,6 +75,9 @@ + @@ -152,8 +155,8 @@

    Vision