From 2f06131ada093cccd411454ddab9a7dba24a9007 Mon Sep 17 00:00:00 2001 From: Jesse Squires Date: Thu, 31 Jan 2019 12:25:50 -0800 Subject: [PATCH] [0.4.0] gen docs --- docs/Classes.html | 4 +- docs/Classes/CollectionViewDriver.html | 6 +- docs/Classes/TableViewDriver.html | 6 +- .../TableViewDriver/TableRefreshContext.html | 4 +- docs/Enums.html | 4 +- docs/Enums/SupplementaryViewKind.html | 4 +- docs/Enums/ViewRegistrationMethod.html | 4 +- docs/Guides.html | 30 +++++++++- docs/Protocols.html | 4 +- docs/Protocols/CollectionCellViewModel.html | 12 ++-- .../CollectionSupplementaryViewModel.html | 8 +-- docs/Protocols/DiffableViewModel.html | 6 +- docs/Protocols/ReusableCellProtocol.html | 6 +- .../ReusableCellViewModelProtocol.html | 6 +- ...eusableSupplementaryViewModelProtocol.html | 6 +- docs/Protocols/TableCellViewModel.html | 40 ++++++++----- .../TableSectionHeaderFooterViewModel.html | 8 +-- .../TableViewCellModelEditActions.html | 4 +- docs/Structs.html | 4 +- docs/Structs/AnyDiffableViewModel.html | 4 +- docs/Structs/CollectionSectionViewModel.html | 34 +++++------ docs/Structs/CollectionViewModel.html | 10 ++-- docs/Structs/SupplementaryViewInfo.html | 4 +- docs/Structs/TableSectionViewModel.html | 45 ++++++++------- docs/Structs/TableViewModel.html | 45 ++++++++++++--- docs/Structs/ViewRegistrationInfo.html | 4 +- docs/Typealiases.html | 4 +- docs/css/jazzy.css | 15 +++-- .../Contents/Resources/Documents/Classes.html | 4 +- .../Classes/CollectionViewDriver.html | 6 +- .../Documents/Classes/TableViewDriver.html | 6 +- .../TableViewDriver/TableRefreshContext.html | 4 +- .../Contents/Resources/Documents/Enums.html | 4 +- .../Enums/SupplementaryViewKind.html | 4 +- .../Enums/ViewRegistrationMethod.html | 4 +- .../Contents/Resources/Documents/Guides.html | 30 +++++++++- .../Resources/Documents/Protocols.html | 4 +- .../Protocols/CollectionCellViewModel.html | 12 ++-- .../CollectionSupplementaryViewModel.html | 8 +-- .../Protocols/DiffableViewModel.html | 6 +- .../Protocols/ReusableCellProtocol.html | 6 +- .../ReusableCellViewModelProtocol.html | 6 +- ...eusableSupplementaryViewModelProtocol.html | 6 +- .../Protocols/TableCellViewModel.html | 40 ++++++++----- .../TableSectionHeaderFooterViewModel.html | 8 +-- .../TableViewCellModelEditActions.html | 4 +- .../Contents/Resources/Documents/Structs.html | 4 +- .../Structs/AnyDiffableViewModel.html | 4 +- .../Structs/CollectionSectionViewModel.html | 34 +++++------ .../Structs/CollectionViewModel.html | 10 ++-- .../Structs/SupplementaryViewInfo.html | 4 +- .../Structs/TableSectionViewModel.html | 45 ++++++++------- .../Documents/Structs/TableViewModel.html | 45 ++++++++++++--- .../Structs/ViewRegistrationInfo.html | 4 +- .../Resources/Documents/Typealiases.html | 4 +- .../Resources/Documents/css/jazzy.css | 15 +++-- .../Resources/Documents/getting-started.html | 54 +++++++++--------- .../Contents/Resources/Documents/index.html | 24 ++++---- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/Documents/vision.html | 4 +- .../Contents/Resources/docSet.dsidx | Bin 45056 -> 45056 bytes docs/docsets/ReactiveLists.tgz | Bin 78006 -> 78561 bytes docs/getting-started.html | 54 +++++++++--------- docs/index.html | 24 ++++---- docs/search.json | 2 +- docs/undocumented.json | 2 +- docs/vision.html | 4 +- 67 files changed, 487 insertions(+), 345 deletions(-) diff --git a/docs/Classes.html b/docs/Classes.html index 487d1a0..521a3a9 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -211,8 +211,8 @@

Declaration

diff --git a/docs/Classes/CollectionViewDriver.html b/docs/Classes/CollectionViewDriver.html index 68c84fb..5114cda 100644 --- a/docs/Classes/CollectionViewDriver.html +++ b/docs/Classes/CollectionViewDriver.html @@ -216,7 +216,7 @@

Declaration

Declaration

Swift

-
public var collectionViewModel: CollectionViewModel? { get set }
+
public var collectionViewModel: CollectionViewModel? { get set }
@@ -369,8 +369,8 @@

Declaration

diff --git a/docs/Classes/TableViewDriver.html b/docs/Classes/TableViewDriver.html index f4254fe..e4aef28 100644 --- a/docs/Classes/TableViewDriver.html +++ b/docs/Classes/TableViewDriver.html @@ -237,7 +237,7 @@

Declaration

Declaration

Swift

-
public var tableViewModel: TableViewModel? { get set }
+
public var tableViewModel: TableViewModel? { get set }
@@ -433,8 +433,8 @@

Declaration

diff --git a/docs/Classes/TableViewDriver/TableRefreshContext.html b/docs/Classes/TableViewDriver/TableRefreshContext.html index f02ba31..99929a7 100644 --- a/docs/Classes/TableViewDriver/TableRefreshContext.html +++ b/docs/Classes/TableViewDriver/TableRefreshContext.html @@ -234,8 +234,8 @@

Declaration

diff --git a/docs/Enums.html b/docs/Enums.html index 952748c..de5581b 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -212,8 +212,8 @@

Declaration

diff --git a/docs/Enums/SupplementaryViewKind.html b/docs/Enums/SupplementaryViewKind.html index 7886b1d..1c3d841 100644 --- a/docs/Enums/SupplementaryViewKind.html +++ b/docs/Enums/SupplementaryViewKind.html @@ -212,8 +212,8 @@

Declaration

diff --git a/docs/Enums/ViewRegistrationMethod.html b/docs/Enums/ViewRegistrationMethod.html index 2ec9564..b2d2bdf 100644 --- a/docs/Enums/ViewRegistrationMethod.html +++ b/docs/Enums/ViewRegistrationMethod.html @@ -237,8 +237,8 @@

Declaration

diff --git a/docs/Guides.html b/docs/Guides.html index 36e4674..12301e8 100644 --- a/docs/Guides.html +++ b/docs/Guides.html @@ -140,11 +140,37 @@

Guides

+
+ +
+
+ +
diff --git a/docs/Protocols.html b/docs/Protocols.html index 88b2304..d365b8a 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -419,8 +419,8 @@

Declaration

diff --git a/docs/Protocols/CollectionCellViewModel.html b/docs/Protocols/CollectionCellViewModel.html index 1de350c..882c614 100644 --- a/docs/Protocols/CollectionCellViewModel.html +++ b/docs/Protocols/CollectionCellViewModel.html @@ -168,7 +168,7 @@

CollectionCellViewModel

Declaration

Swift

-
var accessibilityFormat: CellAccessibilityFormat { get }
+
var accessibilityFormat: CellAccessibilityFormat { get }
@@ -203,7 +203,7 @@

Default Implementation

Declaration

Swift

-
var shouldHighlight: Bool { get }
+
var shouldHighlight: Bool { get }
@@ -238,7 +238,7 @@

Default Implementation

Declaration

Swift

-
var didSelect: DidSelectClosure? { get }
+
var didSelect: DidSelectClosure? { get }
@@ -273,7 +273,7 @@

Default Implementation

Declaration

Swift

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

Parameters

diff --git a/docs/Protocols/CollectionSupplementaryViewModel.html b/docs/Protocols/CollectionSupplementaryViewModel.html index 8277086..3f20f22 100644 --- a/docs/Protocols/CollectionSupplementaryViewModel.html +++ b/docs/Protocols/CollectionSupplementaryViewModel.html @@ -176,7 +176,7 @@

Default Implementation

Declaration

Swift

-
var viewInfo: SupplementaryViewInfo? { get }
+
var viewInfo: SupplementaryViewInfo? { get }
@@ -211,7 +211,7 @@

Default Implementation

Declaration

Swift

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

Parameters

diff --git a/docs/Protocols/DiffableViewModel.html b/docs/Protocols/DiffableViewModel.html index b7cd2e9..bf30f6e 100644 --- a/docs/Protocols/DiffableViewModel.html +++ b/docs/Protocols/DiffableViewModel.html @@ -183,7 +183,7 @@

Default Implementation

Declaration

Swift

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

Declaration

diff --git a/docs/Protocols/ReusableCellProtocol.html b/docs/Protocols/ReusableCellProtocol.html index 2997146..3cb40b2 100644 --- a/docs/Protocols/ReusableCellProtocol.html +++ b/docs/Protocols/ReusableCellProtocol.html @@ -168,7 +168,7 @@

ReusableCellProtocol

Declaration

Swift

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

Declaration

diff --git a/docs/Protocols/ReusableCellViewModelProtocol.html b/docs/Protocols/ReusableCellViewModelProtocol.html index 2b66fa4..4d0e4e7 100644 --- a/docs/Protocols/ReusableCellViewModelProtocol.html +++ b/docs/Protocols/ReusableCellViewModelProtocol.html @@ -169,7 +169,7 @@

ReusableCellViewModelProtocol

Declaration

Swift

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

Declaration

diff --git a/docs/Protocols/ReusableSupplementaryViewModelProtocol.html b/docs/Protocols/ReusableSupplementaryViewModelProtocol.html index 46e51b9..ab5dada 100644 --- a/docs/Protocols/ReusableSupplementaryViewModelProtocol.html +++ b/docs/Protocols/ReusableSupplementaryViewModelProtocol.html @@ -169,7 +169,7 @@

ReusableSupplementaryViewModelProtocol

Declaration

Swift

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

Declaration

diff --git a/docs/Protocols/TableCellViewModel.html b/docs/Protocols/TableCellViewModel.html index c20c506..2fd3992 100644 --- a/docs/Protocols/TableCellViewModel.html +++ b/docs/Protocols/TableCellViewModel.html @@ -168,7 +168,7 @@

TableCellViewModel

Declaration

Swift

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

Declaration

  • - + - rowHeight + rowHeight Default implementation @@ -196,14 +196,24 @@

    Declaration

    Default Implementation

    -

    Default implementation, returns 44.0.

    +

    Default implementation, returns nil.

    +
    +

    Note

    + If nil, the TableViewDriver will fallback to TableViewModel.defaultRowHeight. + +
    +
    +

    See

    + See also: TableViewModel + +

    Declaration

    Swift

    -
    var rowHeight: CGFloat { get }
    +
    var rowHeight: CGFloat? { get }
    @@ -238,7 +248,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var editingStyle: UITableViewCell.EditingStyle { get }
    +
    var editingStyle: UITableViewCell.EditingStyle { get }
    @@ -273,7 +283,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldHighlight: Bool { get }
    +
    var shouldHighlight: Bool { get }
    @@ -308,7 +318,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldIndentWhileEditing: Bool { get }
    +
    var shouldIndentWhileEditing: Bool { get }
    @@ -343,7 +353,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var willBeginEditing: WillBeginEditingClosure? { get }
    +
    var willBeginEditing: WillBeginEditingClosure? { get }
    @@ -378,7 +388,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didEndEditing: DidEndEditingClosure? { get }
    +
    var didEndEditing: DidEndEditingClosure? { get }
    @@ -413,7 +423,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    +
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    @@ -448,7 +458,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didSelect: DidSelectClosure? { get }
    +
    var didSelect: DidSelectClosure? { get }
    @@ -483,7 +493,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    +
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    @@ -542,8 +552,8 @@

    Parameters

    diff --git a/docs/Protocols/TableSectionHeaderFooterViewModel.html b/docs/Protocols/TableSectionHeaderFooterViewModel.html index 4ee3986..91ba187 100644 --- a/docs/Protocols/TableSectionHeaderFooterViewModel.html +++ b/docs/Protocols/TableSectionHeaderFooterViewModel.html @@ -169,7 +169,7 @@

    TableSectionHeaderFooterViewModel

    Declaration

    Swift

    -
    var title: String? { get }
    +
    var title: String? { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

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

    Parameters

    diff --git a/docs/Protocols/TableViewCellModelEditActions.html b/docs/Protocols/TableViewCellModelEditActions.html index 3775727..c647b5c 100644 --- a/docs/Protocols/TableViewCellModelEditActions.html +++ b/docs/Protocols/TableViewCellModelEditActions.html @@ -181,8 +181,8 @@

    Declaration

    diff --git a/docs/Structs.html b/docs/Structs.html index 86c8de4..23e9482 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -362,8 +362,8 @@

    Declaration

    diff --git a/docs/Structs/AnyDiffableViewModel.html b/docs/Structs/AnyDiffableViewModel.html index 0cd6ce1..ad72f97 100644 --- a/docs/Structs/AnyDiffableViewModel.html +++ b/docs/Structs/AnyDiffableViewModel.html @@ -183,8 +183,8 @@

    Declaration

    diff --git a/docs/Structs/CollectionSectionViewModel.html b/docs/Structs/CollectionSectionViewModel.html index ad8d2c7..054635a 100644 --- a/docs/Structs/CollectionSectionViewModel.html +++ b/docs/Structs/CollectionSectionViewModel.html @@ -202,7 +202,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool { get }
    +
    public var isEmpty: Bool { get }
    @@ -212,9 +212,9 @@

    Declaration

  • - - - init(cellViewModels:headerViewModel:footerViewModel:diffingKey:) + + + init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)
    @@ -230,10 +230,11 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         cellViewModels: [CollectionCellViewModel],
         headerViewModel: CollectionSupplementaryViewModel? = nil,
    -    footerViewModel: CollectionSupplementaryViewModel? = nil,
    -    diffingKey: String = UUID().uuidString)
    + footerViewModel: CollectionSupplementaryViewModel? = nil +)
    @@ -244,48 +245,49 @@

    Parameters

    - cellViewModels + diffingKey
    -

    the cells in this section.

    +

    a String key unique to this section that is used to diff sections +automatically. Pass in nil if you are not using automatic diffing on this collection.

    - headerViewModel + cellViewModels
    -

    the header view model (defaults to nil).

    +

    the cells in this section.

    - footerViewModel + headerViewModel
    -

    the footer view model (defaults to nil).

    +

    the header view model (defaults to nil).

    - diffingKey + footerViewModel
    -

    the diffing key, required for automated diffing.

    +

    the footer view model (defaults to nil).

    @@ -300,8 +302,8 @@

    Parameters

    diff --git a/docs/Structs/CollectionViewModel.html b/docs/Structs/CollectionViewModel.html index ceee657..d592d72 100644 --- a/docs/Structs/CollectionViewModel.html +++ b/docs/Structs/CollectionViewModel.html @@ -195,7 +195,7 @@

    Declaration

    Declaration

    Swift

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

    Parameters

    Declaration

    Swift

    -
    public subscript(ifExists section: Int) -> CollectionSectionViewModel? { get }
    +
    public subscript(ifExists section: Int) -> CollectionSectionViewModel? { get }
    @@ -314,7 +314,7 @@

    Parameters

    Declaration

    Swift

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

    Parameters

    diff --git a/docs/Structs/SupplementaryViewInfo.html b/docs/Structs/SupplementaryViewInfo.html index 7495458..119afe9 100644 --- a/docs/Structs/SupplementaryViewInfo.html +++ b/docs/Structs/SupplementaryViewInfo.html @@ -310,8 +310,8 @@

    Parameters

    diff --git a/docs/Structs/TableSectionViewModel.html b/docs/Structs/TableSectionViewModel.html index cf04f26..5c1b603 100644 --- a/docs/Structs/TableSectionViewModel.html +++ b/docs/Structs/TableSectionViewModel.html @@ -283,7 +283,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool { get }
    +
    public var isEmpty: Bool { get }
    @@ -293,9 +293,9 @@

    Declaration

  • - - - init(cellViewModels:headerViewModel:footerViewModel:diffingKey:) + + + init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)
    @@ -311,10 +311,11 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         cellViewModels: [TableCellViewModel],
         headerViewModel: TableSectionHeaderFooterViewModel? = nil,
    -    footerViewModel: TableSectionHeaderFooterViewModel? = nil,
    -    diffingKey: String = UUID().uuidString)
    + footerViewModel: TableSectionHeaderFooterViewModel? = nil +)
    @@ -325,48 +326,49 @@

    Parameters

    - cellViewModels + diffingKey
    -

    The cell view models contained in this section.

    +

    a String key unique to this section that is used to diff sections +automatically. Pass in nil if you are not using automatic diffing on this collection.

    - headerViewModel + cellViewModels
    -

    A header view model for this section (defaults to nil).

    +

    The cell view models contained in this section.

    - footerViewModel + headerViewModel
    -

    A footer view model for this section (defaults to nil).

    +

    A header view model for this section (defaults to nil).

    - diffingKey + footerViewModel
    -

    A diffing key.

    +

    A footer view model for this section (defaults to nil).

    @@ -379,9 +381,9 @@

    Parameters

  • - - - init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:) + + + init(diffingKey:headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:)
    @@ -397,12 +399,13 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         headerTitle: String?,
         headerHeight: CGFloat?,
         cellViewModels: [TableCellViewModel],
         footerTitle: String? = nil,
    -    footerHeight: CGFloat? = 0,
    -    diffingKey: String = UUID().uuidString)
    + footerHeight: CGFloat? = 0 +)
    @@ -493,8 +496,8 @@

    Parameters

    diff --git a/docs/Structs/TableViewModel.html b/docs/Structs/TableViewModel.html index f35d78c..cf0e9c3 100644 --- a/docs/Structs/TableViewModel.html +++ b/docs/Structs/TableViewModel.html @@ -148,6 +148,33 @@

    TableViewModel

    @@ -401,7 +428,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(ifExists indexPath: IndexPath) -> TableCellViewModel? { get }
    +
    public subscript(ifExists indexPath: IndexPath) -> TableCellViewModel? { get }
    @@ -432,8 +459,8 @@

    Parameters

    diff --git a/docs/Structs/ViewRegistrationInfo.html b/docs/Structs/ViewRegistrationInfo.html index f22d17c..4cead97 100644 --- a/docs/Structs/ViewRegistrationInfo.html +++ b/docs/Structs/ViewRegistrationInfo.html @@ -335,8 +335,8 @@

    Parameters

    diff --git a/docs/Typealiases.html b/docs/Typealiases.html index 0b112a2..78547db 100644 --- a/docs/Typealiases.html +++ b/docs/Typealiases.html @@ -174,8 +174,8 @@

    Declaration

    diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css index d628282..a982892 100644 --- a/docs/css/jazzy.css +++ b/docs/css/jazzy.css @@ -150,7 +150,7 @@ header { margin-left: 246px; position: absolute; overflow: hidden; - padding-bottom: 60px; + padding-bottom: 20px; top: 70px; width: 734px; } .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { @@ -216,10 +216,12 @@ header { .item code { background-color: transparent; padding: 0; } - .item .token { + .item .token, .item .direct-link { padding-left: 3px; margin-left: 15px; font-size: 11.9px; } + .item .discouraged { + text-decoration: line-through; } .item .declaration-note { font-size: .85em; color: gray; @@ -283,9 +285,9 @@ header { .language .aside-title { color: #4b8afb; } -.aside-warning { +.aside-warning, .aside-deprecated, .aside-unavailable { border-left: 5px solid #ff6666; } - .aside-warning .aside-title { + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { color: #ff0000; } .graybox { @@ -310,8 +312,9 @@ header { font-size: 0.9em; } #footer { - position: absolute; - bottom: 10px; + position: relative; + top: 10px; + bottom: 0px; margin-left: 25px; } #footer p { margin: 0; diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html index 487d1a0..521a3a9 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes.html @@ -211,8 +211,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 68c84fb..5114cda 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/CollectionViewDriver.html @@ -216,7 +216,7 @@

    Declaration

    Declaration

    Swift

    -
    public var collectionViewModel: CollectionViewModel? { get set }
    +
    public var collectionViewModel: CollectionViewModel? { get set }
    @@ -369,8 +369,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 f4254fe..e4aef28 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Classes/TableViewDriver.html @@ -237,7 +237,7 @@

    Declaration

    Declaration

    Swift

    -
    public var tableViewModel: TableViewModel? { get set }
    +
    public var tableViewModel: TableViewModel? { get set }
    @@ -433,8 +433,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 f02ba31..99929a7 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 @@ -234,8 +234,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 952748c..de5581b 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums.html @@ -212,8 +212,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 7886b1d..1c3d841 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/SupplementaryViewKind.html @@ -212,8 +212,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 2ec9564..b2d2bdf 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Enums/ViewRegistrationMethod.html @@ -237,8 +237,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Guides.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Guides.html index 36e4674..12301e8 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Guides.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Guides.html @@ -140,11 +140,37 @@

    Guides

    +
    + +
    +
    + +
    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols.html index 88b2304..d365b8a 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols.html @@ -419,8 +419,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 1de350c..882c614 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionCellViewModel.html @@ -168,7 +168,7 @@

    CollectionCellViewModel

    Declaration

    Swift

    -
    var accessibilityFormat: CellAccessibilityFormat { get }
    +
    var accessibilityFormat: CellAccessibilityFormat { get }
    @@ -203,7 +203,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldHighlight: Bool { get }
    +
    var shouldHighlight: Bool { get }
    @@ -238,7 +238,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didSelect: DidSelectClosure? { get }
    +
    var didSelect: DidSelectClosure? { get }
    @@ -273,7 +273,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didDeselect: DidDeselectClosure? { get }
    +
    var didDeselect: DidDeselectClosure? { get }
    @@ -332,8 +332,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 8277086..3f20f22 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/CollectionSupplementaryViewModel.html @@ -176,7 +176,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo? { get }
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -211,7 +211,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var height: CGFloat? { get }
    +
    var height: CGFloat? { get }
    @@ -270,8 +270,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 b7cd2e9..bf30f6e 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/DiffableViewModel.html @@ -183,7 +183,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var diffingKey: DiffingKey { get }
    +
    var diffingKey: DiffingKey { get }
    @@ -195,8 +195,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 index 2997146..3cb40b2 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellProtocol.html @@ -168,7 +168,7 @@

    ReusableCellProtocol

    Declaration

    Swift

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

    Declaration

    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 2b66fa4..4d0e4e7 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableCellViewModelProtocol.html @@ -169,7 +169,7 @@

    ReusableCellViewModelProtocol

    Declaration

    Swift

    -
    var registrationInfo: ViewRegistrationInfo { get }
    +
    var registrationInfo: ViewRegistrationInfo { get }
    @@ -181,8 +181,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 46e51b9..ab5dada 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/ReusableSupplementaryViewModelProtocol.html @@ -169,7 +169,7 @@

    ReusableSupplementaryViewModelProtocol

    Declaration

    Swift

    -
    var viewInfo: SupplementaryViewInfo? { get }
    +
    var viewInfo: SupplementaryViewInfo? { get }
    @@ -181,8 +181,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 c20c506..2fd3992 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableCellViewModel.html @@ -168,7 +168,7 @@

    TableCellViewModel

    Declaration

    Swift

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

    Declaration

  • - + - rowHeight + rowHeight Default implementation @@ -196,14 +196,24 @@

    Declaration

    Default Implementation

    -

    Default implementation, returns 44.0.

    +

    Default implementation, returns nil.

    +
    +

    Note

    + If nil, the TableViewDriver will fallback to TableViewModel.defaultRowHeight. + +
    +
    +

    See

    + See also: TableViewModel + +

    Declaration

    Swift

    -
    var rowHeight: CGFloat { get }
    +
    var rowHeight: CGFloat? { get }
    @@ -238,7 +248,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var editingStyle: UITableViewCell.EditingStyle { get }
    +
    var editingStyle: UITableViewCell.EditingStyle { get }
    @@ -273,7 +283,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldHighlight: Bool { get }
    +
    var shouldHighlight: Bool { get }
    @@ -308,7 +318,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var shouldIndentWhileEditing: Bool { get }
    +
    var shouldIndentWhileEditing: Bool { get }
    @@ -343,7 +353,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var willBeginEditing: WillBeginEditingClosure? { get }
    +
    var willBeginEditing: WillBeginEditingClosure? { get }
    @@ -378,7 +388,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didEndEditing: DidEndEditingClosure? { get }
    +
    var didEndEditing: DidEndEditingClosure? { get }
    @@ -413,7 +423,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    +
    var commitEditingStyle: CommitEditingStyleClosure? { get }
    @@ -448,7 +458,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var didSelect: DidSelectClosure? { get }
    +
    var didSelect: DidSelectClosure? { get }
    @@ -483,7 +493,7 @@

    Default Implementation

    Declaration

    Swift

    -
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    +
    var accessoryButtonTapped: AccessoryButtonTappedClosure? { get }
    @@ -542,8 +552,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 4ee3986..91ba187 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableSectionHeaderFooterViewModel.html @@ -169,7 +169,7 @@

    TableSectionHeaderFooterViewModel

    Declaration

    Swift

    -
    var title: String? { get }
    +
    var title: String? { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

    -
    var height: CGFloat? { get }
    +
    var height: CGFloat? { get }
    @@ -255,8 +255,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 3775727..c647b5c 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Protocols/TableViewCellModelEditActions.html @@ -181,8 +181,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 86c8de4..23e9482 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs.html @@ -362,8 +362,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/AnyDiffableViewModel.html b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/AnyDiffableViewModel.html index 0cd6ce1..ad72f97 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/AnyDiffableViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/AnyDiffableViewModel.html @@ -183,8 +183,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 ad8d2c7..054635a 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionSectionViewModel.html @@ -202,7 +202,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool { get }
    +
    public var isEmpty: Bool { get }
    @@ -212,9 +212,9 @@

    Declaration

  • - - - init(cellViewModels:headerViewModel:footerViewModel:diffingKey:) + + + init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)
    @@ -230,10 +230,11 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         cellViewModels: [CollectionCellViewModel],
         headerViewModel: CollectionSupplementaryViewModel? = nil,
    -    footerViewModel: CollectionSupplementaryViewModel? = nil,
    -    diffingKey: String = UUID().uuidString)
    + footerViewModel: CollectionSupplementaryViewModel? = nil +)
    @@ -244,48 +245,49 @@

    Parameters

    - cellViewModels + diffingKey
    -

    the cells in this section.

    +

    a String key unique to this section that is used to diff sections +automatically. Pass in nil if you are not using automatic diffing on this collection.

    - headerViewModel + cellViewModels
    -

    the header view model (defaults to nil).

    +

    the cells in this section.

    - footerViewModel + headerViewModel
    -

    the footer view model (defaults to nil).

    +

    the header view model (defaults to nil).

    - diffingKey + footerViewModel
    -

    the diffing key, required for automated diffing.

    +

    the footer view model (defaults to nil).

    @@ -300,8 +302,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 ceee657..d592d72 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/CollectionViewModel.html @@ -195,7 +195,7 @@

    Declaration

    Declaration

    Swift

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

    Parameters

    Declaration

    Swift

    -
    public subscript(ifExists section: Int) -> CollectionSectionViewModel? { get }
    +
    public subscript(ifExists section: Int) -> CollectionSectionViewModel? { get }
    @@ -314,7 +314,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(ifExists indexPath: IndexPath) -> CollectionCellViewModel? { get }
    +
    public subscript(ifExists indexPath: IndexPath) -> CollectionCellViewModel? { get }
    @@ -345,8 +345,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 7495458..119afe9 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/SupplementaryViewInfo.html @@ -310,8 +310,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 cf04f26..5c1b603 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableSectionViewModel.html @@ -283,7 +283,7 @@

    Declaration

    Declaration

    Swift

    -
    public var isEmpty: Bool { get }
    +
    public var isEmpty: Bool { get }
    @@ -293,9 +293,9 @@

    Declaration

  • - - - init(cellViewModels:headerViewModel:footerViewModel:diffingKey:) + + + init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)
    @@ -311,10 +311,11 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         cellViewModels: [TableCellViewModel],
         headerViewModel: TableSectionHeaderFooterViewModel? = nil,
    -    footerViewModel: TableSectionHeaderFooterViewModel? = nil,
    -    diffingKey: String = UUID().uuidString)
    + footerViewModel: TableSectionHeaderFooterViewModel? = nil +)
    @@ -325,48 +326,49 @@

    Parameters

    - cellViewModels + diffingKey
    -

    The cell view models contained in this section.

    +

    a String key unique to this section that is used to diff sections +automatically. Pass in nil if you are not using automatic diffing on this collection.

    - headerViewModel + cellViewModels
    -

    A header view model for this section (defaults to nil).

    +

    The cell view models contained in this section.

    - footerViewModel + headerViewModel
    -

    A footer view model for this section (defaults to nil).

    +

    A header view model for this section (defaults to nil).

    - diffingKey + footerViewModel
    -

    A diffing key.

    +

    A footer view model for this section (defaults to nil).

    @@ -379,9 +381,9 @@

    Parameters

  • - - - init(headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:diffingKey:) + + + init(diffingKey:headerTitle:headerHeight:cellViewModels:footerTitle:footerHeight:)
    @@ -397,12 +399,13 @@

    Declaration

    Swift

    public init(
    +    diffingKey: String?,
         headerTitle: String?,
         headerHeight: CGFloat?,
         cellViewModels: [TableCellViewModel],
         footerTitle: String? = nil,
    -    footerHeight: CGFloat? = 0,
    -    diffingKey: String = UUID().uuidString)
    + footerHeight: CGFloat? = 0 +)
    @@ -493,8 +496,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 f35d78c..cf0e9c3 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/TableViewModel.html @@ -148,6 +148,33 @@

    TableViewModel

    @@ -401,7 +428,7 @@

    Parameters

    Declaration

    Swift

    -
    public subscript(ifExists indexPath: IndexPath) -> TableCellViewModel? { get }
    +
    public subscript(ifExists indexPath: IndexPath) -> TableCellViewModel? { get }
    @@ -432,8 +459,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 f22d17c..4cead97 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Structs/ViewRegistrationInfo.html @@ -335,8 +335,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 0b112a2..78547db 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/Typealiases.html @@ -174,8 +174,8 @@

    Declaration

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/css/jazzy.css index d628282..a982892 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/css/jazzy.css +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/css/jazzy.css @@ -150,7 +150,7 @@ header { margin-left: 246px; position: absolute; overflow: hidden; - padding-bottom: 60px; + padding-bottom: 20px; top: 70px; width: 734px; } .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { @@ -216,10 +216,12 @@ header { .item code { background-color: transparent; padding: 0; } - .item .token { + .item .token, .item .direct-link { padding-left: 3px; margin-left: 15px; font-size: 11.9px; } + .item .discouraged { + text-decoration: line-through; } .item .declaration-note { font-size: .85em; color: gray; @@ -283,9 +285,9 @@ header { .language .aside-title { color: #4b8afb; } -.aside-warning { +.aside-warning, .aside-deprecated, .aside-unavailable { border-left: 5px solid #ff6666; } - .aside-warning .aside-title { + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { color: #ff0000; } .graybox { @@ -310,8 +312,9 @@ header { font-size: 0.9em; } #footer { - position: absolute; - bottom: 10px; + position: relative; + top: 10px; + bottom: 0px; margin-left: 25px; } #footer p { margin: 0; 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 4442789..4f39b6d 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/getting-started.html @@ -140,9 +140,9 @@

    Getting Started

    ReactiveLists provides a React-like API for UITableView and UICollectionView. The goal is to provide a more declarative interface on top of your normal table and collection code. To get started with ReactiveLists, in addition to reading this document, we encourage you to play around with the example app included in the repository.

    Checking out the code

    -
    $ git clone https://github.com/plangrid/ReactiveLists.git
    -$ cd ReactiveLists/
    -$ open ReactiveLists.xcworkspace
    +
    $ git clone https://github.com/plangrid/ReactiveLists.git
    +$ cd ReactiveLists/
    +$ open ReactiveLists.xcworkspace
     

    Primary Components

    SectionViewModel

    @@ -165,18 +165,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()
    @@ -189,12 +189,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?
                       .
    @@ -203,8 +203,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")] } }
    @@ -219,13 +219,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
             )
    @@ -236,16 +236,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])
         }
     }
     
    @@ -257,10 +257,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
    @@ -277,7 +277,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 } } @@ -294,8 +294,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 fd123e2..0f3bc3e 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/index.html @@ -156,18 +156,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()
    @@ -204,14 +204,14 @@ 

    Documentation

    Read our documentation here. Generated with jazzy. Hosted by GitHub Pages.

    Generating docs

    -
    $ ./scripts/gen_docs.sh
    +
    $ ./scripts/gen_docs.sh
     

    Requirements

      -
    • Xcode 9.4+
    • -
    • Swift 4.1+
    • -
    • iOS 9+
    • +
    • Xcode 10+
    • +
    • Swift 4.2+
    • +
    • iOS 10+

    Installation

    @@ -237,8 +237,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 a29d843..ed87f49 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/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:13ReactiveLists20ViewRegistrationInfoV9classTypeACyXlXp_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV9classType7nibName6bundleACyXlXp_SSSo8NSBundleCSgtcfc":{"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 all empty sections.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV04cellD6ModelsACSayAA0c4CelldE0_pG_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:13ReactiveLists14TableViewModelV13sectionModels0F11IndexTitlesACSayAA0c7SectiondE0VG_SaySSGSgtcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

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

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

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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:13ReactiveLists21TableSectionViewModelV10diffingKeySSvp":{"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 if this section has zero cell view models, false otherwise.

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

    Initializes a TableSectionViewModel.

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

    Initializes a TableSectionViewModel.

    ","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:13ReactiveLists21SupplementaryViewInfoV012registrationE04kind19accessibilityFormatAcA0d12RegistrationE0V_AA0cD4KindOAA0c13AccessibilityI0Vtcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/AnyDiffableViewModel.html#/s:13ReactiveLists20AnyDiffableViewModelV5modelAA0deF0_pvp":{"name":"model","abstract":"

    The type-erased DiffableViewModel

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

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

    Returns true if this section has zero cell view models, false otherwise.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV04cellE6Models06headereF006footereF010diffingKeyACSayAA0c4CelleF0_pG_AA0c13SupplementaryeF0_pSgAKSStcfc":{"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:13ReactiveLists19CollectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this collection has all empty sections.

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

    Initializes a collection view model with the sections provided.

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

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

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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/AnyDiffableViewModel.html":{"name":"AnyDiffableViewModel","abstract":"

    MARK: - DifferenceKit Helpers"},"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:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0yySo6UIViewCF":{"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:13ReactiveLists18TableCellViewModelP12editingStyleSo07UITableed7EditingH0Vvp":{"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:13ReactiveLists18TableCellViewModelP18commitEditingStyleySo07UITableedhI0VcSgvp":{"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:13ReactiveLists18TableCellViewModelP05applyef2ToD0yySo07UITableeD0CF":{"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:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0yySo020UICollectionReusableE0CF":{"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:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0yySo012UICollectioneD0CF":{"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:13ReactiveLists22ViewRegistrationMethodO9fromClassyACyXlXpcACmF":{"name":"fromClass(_:)","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibyACSS_So8NSBundleCSgtcACmF":{"name":"fromNib(name:bundle:)","abstract":"

    Nib-based views

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

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footeryA2CmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedyA2EmF":{"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:13ReactiveLists15TableViewDriverC18insertionAnimationSo07UITabled3RowG0Vvp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

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

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo07UITableD0C_AA0cdG0VSgS2btcfc":{"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:13ReactiveLists15TableViewDriverC12refreshViews0F7ContextyAC0c7RefreshH0O_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:13ReactiveLists20CollectionViewDriverC010collectionD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo012UICollectionD0C_AA0cdG0VSgS2btcfc":{"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 +{"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:13ReactiveLists20ViewRegistrationInfoV9classTypeACyXlXp_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

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

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

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

    The default row height for this table view. The default value is 44.

    ","parent_name":"TableViewModel"},"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 all empty sections.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV04cellD6ModelsACSayAA0c4CelldE0_pG_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:13ReactiveLists14TableViewModelV13sectionModels0F11IndexTitles16defaultRowHeightACSayAA0c7SectiondE0VG_SaySSGSg12CoreGraphics7CGFloatVtcfc":{"name":"init(sectionModels:sectionIndexTitles:defaultRowHeight:)","abstract":"

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

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

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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:13ReactiveLists21TableSectionViewModelV10diffingKeySSvp":{"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 if this section has zero cell view models, false otherwise.

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

    Initializes a TableSectionViewModel.

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

    Initializes a TableSectionViewModel.

    ","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:13ReactiveLists21SupplementaryViewInfoV012registrationE04kind19accessibilityFormatAcA0d12RegistrationE0V_AA0cD4KindOAA0c13AccessibilityI0Vtcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/AnyDiffableViewModel.html#/s:13ReactiveLists20AnyDiffableViewModelV5modelAA0deF0_pvp":{"name":"model","abstract":"

    The type-erased DiffableViewModel

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

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

    Returns true if this section has zero cell view models, false otherwise.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKey04cellE6Models06headereF006footereF0ACSSSg_SayAA0c4CelleF0_pGAA0c13SupplementaryeF0_pSgALtcfc":{"name":"init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)","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:13ReactiveLists19CollectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this collection has all empty sections.

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

    Initializes a collection view model with the sections provided.

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

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

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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/AnyDiffableViewModel.html":{"name":"AnyDiffableViewModel","abstract":"

    MARK: - DifferenceKit Helpers"},"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:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0yySo6UIViewCF":{"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:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVSgvp":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSo07UITableed7EditingH0Vvp":{"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:13ReactiveLists18TableCellViewModelP18commitEditingStyleySo07UITableedhI0VcSgvp":{"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:13ReactiveLists18TableCellViewModelP05applyef2ToD0yySo07UITableeD0CF":{"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:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0yySo020UICollectionReusableE0CF":{"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:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0yySo012UICollectioneD0CF":{"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:13ReactiveLists22ViewRegistrationMethodO9fromClassyACyXlXpcACmF":{"name":"fromClass(_:)","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibyACSS_So8NSBundleCSgtcACmF":{"name":"fromNib(name:bundle:)","abstract":"

    Nib-based views

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

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footeryA2CmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedyA2EmF":{"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:13ReactiveLists15TableViewDriverC18insertionAnimationSo07UITabled3RowG0Vvp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

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

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo07UITableD0C_AA0cdG0VSgS2btcfc":{"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:13ReactiveLists15TableViewDriverC12refreshViews0F7ContextyAC0c7RefreshH0O_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:13ReactiveLists20CollectionViewDriverC010collectionD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo012UICollectionD0C_AA0cdG0VSgS2btcfc":{"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 eedd8c0..aa39cdd 100644 --- a/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html +++ b/docs/docsets/ReactiveLists.docset/Contents/Resources/Documents/vision.html @@ -158,8 +158,8 @@

    Vision

    diff --git a/docs/docsets/ReactiveLists.docset/Contents/Resources/docSet.dsidx b/docs/docsets/ReactiveLists.docset/Contents/Resources/docSet.dsidx index ff300cc42a2987d9ed3659f0c1eb91f4e8f8951b..85cdcd64b423ee5b23aa5224ced2bcc571383258 100644 GIT binary patch delta 4451 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 OH;mE`y@$C*f%$)ac|}J6 literal 78006 zcma&NWl&wgvNntbcXxLU?h+C_xCMvc?k*dbph1IsaChAy1a}Ya?yh^UH|Kn}Zrz{X zpRS&no|&#ywPw1Xd73H~8K$1A!~h2VtS8WcUcrk=Cx^1JtP0#bn_y*7voW!K_SxG$ zTRZc9WT#$ujAq%v?q`{Q*19;aXw#0BHiMpUb!GL)IBl0z%Sz4SIxN$Z>90nFG3zIU zvDV;}LSECq)?|q2!)2fV0e0g0?OUXPFFBagB!^)E?Ys^n!Mieh-m*d3mISdm$Y&}| zJalx%0X;<5JC7Uw^b%mM7-fYC$@D*woKy;zV_CKPS&AQ1?mn}|96sB1j9XR;Edw{Q ztXgb2YV7Ino~nMkcdN17?xR17<(~9wn#{=%eAggqNiRt-#~~WX|QS84QMp{vW^v7n%PhA&}Am7D&1FXY0SZ^Tp;C||Mt#j6*5_IeiqckFLtVMGa0? zg-QJZLoBGi1nxM|#6=i+29=KLk^uR#s8oPl!d%GDyM;);Z}k6`v%~_p@JHhSRfd5r zzy|Ab7kJkUCVG!n_q+_g=LvpY`lj7$s4@&0i+fe2ji>|JFC;Rc;NAjoCKbs4X3-7o z1ETAJ3`_RKh9jp^5OtO`+-u-#$Td(=g7XYkV=Gi=L(_sf_mtcK`W0Vx>?6XvfJPGt z-Fv8H5UL5VTkR*Bc?vL*umVKkmH9vh8%cs{aftdcTQ5|1(|5zxT`swDMDg*WC~22S zxMEc;%k6RNVrP!&F+H7VQ*W%cxA)m)cZ4aiRY;7iT~2i~5M&)@U^sfXXt{T5K*jDB%VBg`vv)f*G$f4Uwoj^v#6#Ox#44_^fb{-6eHy9b=Z4{@ zg``=dy=qHgrxq4Lk0*GDFEhrXz(vpMrNHW}3ZAm2uSxp+f|%Hluo|VZE)K-LymRev zC&L8Ot&)49(8rPAx%-jmDdg|>a+!`rl+s}3(gwEU#Fe7ny7FBAuX0XUo0S~%I!FPO!I%y(XDPP zwerbDbS$r+QAYUfQMz62%&#iz!k;MT6W?$_qTu=nJgC&iL`g2q?^%sw=-)x7ssIk{ zzmQFj+31(e-)=RL0>=a|ko?mcXQVHCv1y7GI-kp7nP2b04oE^?-@2eFb$+4|7eF}e z{+kK@H@H^t>kfEyLGX|$hV(CAWB#wOk_fyky{$9yH+K?BY&rSbHlv}XjJtrS{wIIcr@IAe z5$pfbHyNec)}D(c&?a#p&v~(pltahlUB%{ABAO#{R0uqL>hUzl7X?iD&)eSSfCpX$tRVcf;NcJj->dHr;~k8u3s;~wq+tSku}JC`yM z5!8v0{MQ$0tK-3|zoKt=6`O*ir_F_8Cp|v5hm+QkzgtYek!4nBo6h3j?^~Otp}kxq zNF0HsG%c%(2unH-1TuoR-@)+#57M_P8%*`GU%9ORd7DWs#JtzWR-)63u;-|a>>4mo z5Pi5R+U+)U^W>S=}6>*w5ze54pwi z@-`Cz|9I7#SIwAUI6KCaPQCwig!}p!?mw^^B#mhovP^KKsw(-U|4o-ai)JtKHt%`a z*!j^EB0h_>US}3_trGl4zLZ5pcm^P0XKD@G|0Lo*N=FfC($$&tJQ;7c$@>kjVvSq6 z4<3fkh=$MCY9-vJkx`9VnTU(a!fBJ3vXiLaLf&n{1vrzL4}i={{|s>ayY%9T5hm<3 z@@g*sInc&`r%LOgt>9)sk zC8>B6Gkg#u9_hE`i1D%|W5dB}B|2gBNz1q2TIN5q2=%0Av~fVH*yL$n$cGiK9w`0V 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 diff --git a/docs/getting-started.html b/docs/getting-started.html index 4442789..4f39b6d 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -140,9 +140,9 @@

    Getting Started

    ReactiveLists provides a React-like API for UITableView and UICollectionView. The goal is to provide a more declarative interface on top of your normal table and collection code. To get started with ReactiveLists, in addition to reading this document, we encourage you to play around with the example app included in the repository.

    Checking out the code

    -
    $ git clone https://github.com/plangrid/ReactiveLists.git
    -$ cd ReactiveLists/
    -$ open ReactiveLists.xcworkspace
    +
    $ git clone https://github.com/plangrid/ReactiveLists.git
    +$ cd ReactiveLists/
    +$ open ReactiveLists.xcworkspace
     

    Primary Components

    SectionViewModel

    @@ -165,18 +165,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()
    @@ -189,12 +189,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?
                       .
    @@ -203,8 +203,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")] } }
    @@ -219,13 +219,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
             )
    @@ -236,16 +236,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])
         }
     }
     
    @@ -257,10 +257,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
    @@ -277,7 +277,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 } } @@ -294,8 +294,8 @@

    Detailed Example

    diff --git a/docs/index.html b/docs/index.html index fd123e2..0f3bc3e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -156,18 +156,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()
    @@ -204,14 +204,14 @@ 

    Documentation

    Read our documentation here. Generated with jazzy. Hosted by GitHub Pages.

    Generating docs

    -
    $ ./scripts/gen_docs.sh
    +
    $ ./scripts/gen_docs.sh
     

    Requirements

      -
    • Xcode 9.4+
    • -
    • Swift 4.1+
    • -
    • iOS 9+
    • +
    • Xcode 10+
    • +
    • Swift 4.2+
    • +
    • iOS 10+

    Installation

    @@ -237,8 +237,8 @@

    License

    diff --git a/docs/search.json b/docs/search.json index a29d843..ed87f49 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"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:13ReactiveLists20ViewRegistrationInfoV9classTypeACyXlXp_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

    ","parent_name":"ViewRegistrationInfo"},"Structs/ViewRegistrationInfo.html#/s:13ReactiveLists20ViewRegistrationInfoV9classType7nibName6bundleACyXlXp_SSSo8NSBundleCSgtcfc":{"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 all empty sections.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV04cellD6ModelsACSayAA0c4CelldE0_pG_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:13ReactiveLists14TableViewModelV13sectionModels0F11IndexTitlesACSayAA0c7SectiondE0VG_SaySSGSgtcfc":{"name":"init(sectionModels:sectionIndexTitles:)","abstract":"

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

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

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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:13ReactiveLists21TableSectionViewModelV10diffingKeySSvp":{"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 if this section has zero cell view models, false otherwise.

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

    Initializes a TableSectionViewModel.

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

    Initializes a TableSectionViewModel.

    ","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:13ReactiveLists21SupplementaryViewInfoV012registrationE04kind19accessibilityFormatAcA0d12RegistrationE0V_AA0cD4KindOAA0c13AccessibilityI0Vtcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/AnyDiffableViewModel.html#/s:13ReactiveLists20AnyDiffableViewModelV5modelAA0deF0_pvp":{"name":"model","abstract":"

    The type-erased DiffableViewModel

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

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

    Returns true if this section has zero cell view models, false otherwise.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV04cellE6Models06headereF006footereF010diffingKeyACSayAA0c4CelleF0_pG_AA0c13SupplementaryeF0_pSgAKSStcfc":{"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:13ReactiveLists19CollectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this collection has all empty sections.

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

    Initializes a collection view model with the sections provided.

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

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

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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/AnyDiffableViewModel.html":{"name":"AnyDiffableViewModel","abstract":"

    MARK: - DifferenceKit Helpers"},"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:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0yySo6UIViewCF":{"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:13ReactiveLists18TableCellViewModelP12editingStyleSo07UITableed7EditingH0Vvp":{"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:13ReactiveLists18TableCellViewModelP18commitEditingStyleySo07UITableedhI0VcSgvp":{"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:13ReactiveLists18TableCellViewModelP05applyef2ToD0yySo07UITableeD0CF":{"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:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0yySo020UICollectionReusableE0CF":{"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:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0yySo012UICollectioneD0CF":{"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:13ReactiveLists22ViewRegistrationMethodO9fromClassyACyXlXpcACmF":{"name":"fromClass(_:)","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibyACSS_So8NSBundleCSgtcACmF":{"name":"fromNib(name:bundle:)","abstract":"

    Nib-based views

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

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footeryA2CmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedyA2EmF":{"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:13ReactiveLists15TableViewDriverC18insertionAnimationSo07UITabled3RowG0Vvp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

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

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo07UITableD0C_AA0cdG0VSgS2btcfc":{"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:13ReactiveLists15TableViewDriverC12refreshViews0F7ContextyAC0c7RefreshH0O_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:13ReactiveLists20CollectionViewDriverC010collectionD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo012UICollectionD0C_AA0cdG0VSgS2btcfc":{"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 +{"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:13ReactiveLists20ViewRegistrationInfoV9classTypeACyXlXp_tcfc":{"name":"init(classType:)","abstract":"

    Initializes a new ViewRegistrationInfo for the provided classType.

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

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

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

    The default row height for this table view. The default value is 44.

    ","parent_name":"TableViewModel"},"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 all empty sections.

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV04cellD6ModelsACSayAA0c4CelldE0_pG_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:13ReactiveLists14TableViewModelV13sectionModels0F11IndexTitles16defaultRowHeightACSayAA0c7SectiondE0VG_SaySSGSg12CoreGraphics7CGFloatVtcfc":{"name":"init(sectionModels:sectionIndexTitles:defaultRowHeight:)","abstract":"

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

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

    ","parent_name":"TableViewModel"},"Structs/TableViewModel.html#/s:13ReactiveLists14TableViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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:13ReactiveLists21TableSectionViewModelV10diffingKeySSvp":{"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 if this section has zero cell view models, false otherwise.

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

    Initializes a TableSectionViewModel.

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

    Initializes a TableSectionViewModel.

    ","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:13ReactiveLists21SupplementaryViewInfoV012registrationE04kind19accessibilityFormatAcA0d12RegistrationE0V_AA0cD4KindOAA0c13AccessibilityI0Vtcfc":{"name":"init(registrationInfo:kind:accessibilityFormat:)","abstract":"

    Initializes the metadata for a supplementary view.

    ","parent_name":"SupplementaryViewInfo"},"Structs/AnyDiffableViewModel.html#/s:13ReactiveLists20AnyDiffableViewModelV5modelAA0deF0_pvp":{"name":"model","abstract":"

    The type-erased DiffableViewModel

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

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

    Returns true if this section has zero cell view models, false otherwise.

    ","parent_name":"CollectionSectionViewModel"},"Structs/CollectionSectionViewModel.html#/s:13ReactiveLists26CollectionSectionViewModelV10diffingKey04cellE6Models06headereF006footereF0ACSSSg_SayAA0c4CelleF0_pGAA0c13SupplementaryeF0_pSgALtcfc":{"name":"init(diffingKey:cellViewModels:headerViewModel:footerViewModel:)","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:13ReactiveLists19CollectionViewModelV7isEmptySbvp":{"name":"isEmpty","abstract":"

    Returns true if this collection has all empty sections.

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

    Initializes a collection view model with the sections provided.

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

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

    ","parent_name":"CollectionViewModel"},"Structs/CollectionViewModel.html#/s:13ReactiveLists19CollectionViewModelV8ifExistsAA0c4CelldE0_pSg10Foundation9IndexPathV_tcip":{"name":"subscript(ifExists:)","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/AnyDiffableViewModel.html":{"name":"AnyDiffableViewModel","abstract":"

    MARK: - DifferenceKit Helpers"},"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:13ReactiveLists33TableSectionHeaderFooterViewModelP05applygh2ToG0yySo6UIViewCF":{"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:13ReactiveLists18TableCellViewModelP9rowHeight12CoreGraphics7CGFloatVSgvp":{"name":"rowHeight","abstract":"

    The height of this cell.

    ","parent_name":"TableCellViewModel"},"Protocols/TableCellViewModel.html#/s:13ReactiveLists18TableCellViewModelP12editingStyleSo07UITableed7EditingH0Vvp":{"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:13ReactiveLists18TableCellViewModelP18commitEditingStyleySo07UITableedhI0VcSgvp":{"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:13ReactiveLists18TableCellViewModelP05applyef2ToD0yySo07UITableeD0CF":{"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:13ReactiveLists32CollectionSupplementaryViewModelP05applyef2ToE0yySo020UICollectionReusableE0CF":{"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:13ReactiveLists23CollectionCellViewModelP05applyef2ToD0yySo012UICollectioneD0CF":{"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:13ReactiveLists22ViewRegistrationMethodO9fromClassyACyXlXpcACmF":{"name":"fromClass(_:)","abstract":"

    Class-based views

    ","parent_name":"ViewRegistrationMethod"},"Enums/ViewRegistrationMethod.html#/s:13ReactiveLists22ViewRegistrationMethodO7fromNibyACSS_So8NSBundleCSgtcACmF":{"name":"fromNib(name:bundle:)","abstract":"

    Nib-based views

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

    A header view.

    ","parent_name":"SupplementaryViewKind"},"Enums/SupplementaryViewKind.html#/s:13ReactiveLists21SupplementaryViewKindO6footeryA2CmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO7unknownyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO11contentOnlyyA2EmF":{"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:13ReactiveLists15TableViewDriverC0C14RefreshContextO12rowsModifiedyA2EmF":{"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:13ReactiveLists15TableViewDriverC18insertionAnimationSo07UITabled3RowG0Vvp":{"name":"insertionAnimation","abstract":"

    The animation for row insertions.

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

    The animation for row deletions.

    ","parent_name":"TableViewDriver"},"Classes/TableViewDriver.html#/s:13ReactiveLists15TableViewDriverC05tableD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo07UITableD0C_AA0cdG0VSgS2btcfc":{"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:13ReactiveLists15TableViewDriverC12refreshViews0F7ContextyAC0c7RefreshH0O_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:13ReactiveLists20CollectionViewDriverC010collectionD00fD5Model27shouldDeselectUponSelection23automaticDiffingEnabledACSo012UICollectionD0C_AA0cdG0VSgS2btcfc":{"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 6d6f14a..c4b8b30 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -2,5 +2,5 @@ "warnings": [ ], - "source_directory": "/Users/basher/Code/ReactiveLists" + "source_directory": "/Users/jsquires/Develop/ReactiveLists" } \ No newline at end of file diff --git a/docs/vision.html b/docs/vision.html index eedd8c0..aa39cdd 100644 --- a/docs/vision.html +++ b/docs/vision.html @@ -158,8 +158,8 @@

    Vision