Skip to content

Commit be3fd7e

Browse files
committed
Public Delegate Proxy properties and optimize ASDataSource batchUpdate
1 parent 42fc2b0 commit be3fd7e

File tree

6 files changed

+51
-51
lines changed

6 files changed

+51
-51
lines changed

Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ $ pod install
3939
To integrate RxTextureDataSources into your Xcode project using Carthage, specify it in your `Cartfile`:
4040

4141
```ogdl
42-
github "RxTextureDataSources/RxTextureDataSources" ~> 0.1
42+
github "dangthaison91/RxTextureDataSources" ~> 0.1
4343
```
4444

4545
## Usage

Sources/DataSources/ASCollectionNode+Rx/RxASCollectionAnimatedDataSource.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ open class RxASCollectionAnimatedDataSource<S: AnimatableSectionModelType>: ASCo
3535
collectionNode.reloadData()
3636
}
3737
} else {
38-
DispatchQueue.main.async {
39-
let oldSections = dataSource.sectionModels
40-
do {
41-
let differences = try differencesForSectionedView(initialSections: oldSections, finalSections: newSections)
38+
let oldSections = dataSource.sectionModels
39+
do {
40+
let differences = try differencesForSectionedView(initialSections: oldSections, finalSections: newSections)
41+
DispatchQueue.main.async {
4242

4343
for difference in differences {
4444
dataSource.setSections(difference.finalSections)
4545
collectionNode.performBatchUpdates(difference, animationConfiguration: self.animationConfiguration)
4646
}
47-
} catch {
48-
rxDebugFatalError("\(error)")
49-
DispatchQueue.main.async {
50-
self.setSections(newSections)
51-
collectionNode.reloadData()
52-
}
47+
}
48+
} catch {
49+
rxDebugFatalError("\(error)")
50+
DispatchQueue.main.async {
51+
self.setSections(newSections)
52+
collectionNode.reloadData()
5353
}
5454
}
5555
}

Sources/DataSources/ASTableNode+Rx/RxASTableAnimatedDataSource.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ open class RxASTableAnimatedDataSource<S: AnimatableSectionModelType>: ASTableSe
3535
tableNode.reloadData()
3636
}
3737
} else {
38-
DispatchQueue.main.async {
39-
let oldSections = dataSource.sectionModels
40-
do {
41-
let differences = try differencesForSectionedView(initialSections: oldSections, finalSections: newSections)
42-
38+
let oldSections = dataSource.sectionModels
39+
do {
40+
let differences = try differencesForSectionedView(initialSections: oldSections, finalSections: newSections)
41+
DispatchQueue.main.async {
4342
for difference in differences {
4443
dataSource.setSections(difference.finalSections)
4544
tableNode.performBatchUpdates(difference, animationConfiguration: self.animationConfiguration)
4645
}
47-
} catch {
48-
rxDebugFatalError("\(error)")
49-
DispatchQueue.main.async {
50-
self.setSections(newSections)
51-
tableNode.reloadData()
52-
}
46+
tableNode.waitUntilAllUpdatesAreCommitted()
47+
}
48+
} catch {
49+
rxDebugFatalError("\(error)")
50+
DispatchQueue.main.async {
51+
self.setSections(newSections)
52+
tableNode.reloadData()
5353
}
5454
}
5555
}

Sources/DataSources/RxProxies/RxASCollectionDataSourceProxy.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ final class ASCollectionDataSourceNotSet: NSObject, ASCollectionDataSource {
2525
}
2626
}
2727

28-
2928
/// For more information take a look at `DelegateProxyType`.
30-
public class RxASCollectionDataSourceProxy: DelegateProxy, ASCollectionDataSource, DelegateProxyType {
29+
public class RxASCollectionDataSourceProxy: DelegateProxy, ASCollectionDataSource, DelegateProxyType {
3130

3231
/// Typed parent object.
3332
public weak private(set) var collectionNode: ASCollectionNode?

Sources/DataSources/RxProxies/RxASCollectionDelegateProxy.swift

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import Foundation
1414
import RxSwift
1515
import RxCocoa
1616
#endif
17-
/// For more information take a look at `DelegateProxyType`.
17+
18+
/// For more information take a look at `DelegateProxyType`.
1819
public class RxASCollectionDelegateProxy: DelegateProxy, DelegateProxyType, ASCollectionDelegate, ASCollectionDelegateFlowLayout {
1920

2021
/// Typed parent object.
@@ -40,7 +41,7 @@ public class RxASCollectionDelegateProxy: DelegateProxy, DelegateProxyType, ASCo
4041
}
4142
}
4243

43-
extension Reactive where Base: ASCollectionNode {
44+
public extension Reactive where Base: ASCollectionNode {
4445

4546
var delegate: DelegateProxy {
4647
return RxASCollectionDelegateProxy.proxyForObject(base)
@@ -58,7 +59,7 @@ extension Reactive where Base: ASCollectionNode {
5859
}
5960

6061
/// Reactive wrapper for `delegate` message `collectionNode(_:didSelectItemAtIndexPath:)`.
61-
public var itemSelected: ControlEvent<IndexPath> {
62+
var itemSelected: ControlEvent<IndexPath> {
6263
let source = delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didSelectItemAt:)))
6364
.map { a in
6465
return a[1] as! IndexPath
@@ -68,7 +69,7 @@ extension Reactive where Base: ASCollectionNode {
6869
}
6970

7071
/// Reactive wrapper for `delegate` message `collectionNode(_:didSelectItemAtIndexPath:)`.
71-
public var itemDeselected: ControlEvent<IndexPath> {
72+
var itemDeselected: ControlEvent<IndexPath> {
7273
let source = delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didDeselectItemAt:)))
7374
.map { a in
7475
return a[1] as! IndexPath
@@ -78,7 +79,7 @@ extension Reactive where Base: ASCollectionNode {
7879
}
7980

8081
/// Reactive wrapper for `delegate` message `collectionNode(_:didHighlightItemAt:)`.
81-
public var itemHighlighted: ControlEvent<IndexPath> {
82+
var itemHighlighted: ControlEvent<IndexPath> {
8283
let source = delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didHighlightItemAt:)))
8384
.map { a in
8485
return try castOrThrow(IndexPath.self, a[1])
@@ -88,7 +89,7 @@ extension Reactive where Base: ASCollectionNode {
8889
}
8990

9091
/// Reactive wrapper for `delegate` message `collectionNode(_:didUnhighlightItemAt:)`.
91-
public var itemUnhighlighted: ControlEvent<IndexPath> {
92+
var itemUnhighlighted: ControlEvent<IndexPath> {
9293
let source = delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didUnhighlightItemAt:)))
9394
.map { a in
9495
return try castOrThrow(IndexPath.self, a[1])
@@ -98,7 +99,7 @@ extension Reactive where Base: ASCollectionNode {
9899
}
99100

100101
/// Reactive wrapper for `delegate` message `collectionNode:willDisplay:forItemAt:`.
101-
public var willDisplayItem: ControlEvent<ASCellNode> {
102+
var willDisplayItem: ControlEvent<ASCellNode> {
102103
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:willDisplayItemWith:)))
103104
.map { a in
104105
return try castOrThrow(ASCellNode.self, a[1])
@@ -108,7 +109,7 @@ extension Reactive where Base: ASCollectionNode {
108109
}
109110

110111
/// Reactive wrapper for `delegate` message `collectionNode(_:willDisplaySupplementaryView:forElementKind:at:)`.
111-
public var willDisplaySupplementaryElement: ControlEvent<ASCellNode> {
112+
var willDisplaySupplementaryElement: ControlEvent<ASCellNode> {
112113
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:willDisplaySupplementaryElementWith:)))
113114
.map { a in
114115
return try castOrThrow(ASCellNode.self, a[1])
@@ -118,7 +119,7 @@ extension Reactive where Base: ASCollectionNode {
118119
}
119120

120121
/// Reactive wrapper for `delegate` message `collectionNode:didEndDisplaying:forItemAt:`.
121-
public var didEndDisplayingItem: ControlEvent<ASCellNode> {
122+
var didEndDisplayingItem: ControlEvent<ASCellNode> {
122123
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didEndDisplayingItemWith:)))
123124
.map { a in
124125
return try castOrThrow(ASCellNode.self, a[1])
@@ -128,7 +129,7 @@ extension Reactive where Base: ASCollectionNode {
128129
}
129130

130131
/// Reactive wrapper for `delegate` message `collectionNode(_:didEndDisplayingSupplementaryView:forElementOfKind:at:)`.
131-
public var didEndDisplayingSupplementaryElement: ControlEvent<ASCellNode> {
132+
var didEndDisplayingSupplementaryElement: ControlEvent<ASCellNode> {
132133
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASCollectionDelegate.collectionNode(_:didEndDisplayingSupplementaryElementWith:)))
133134
.map { a in
134135
return try castOrThrow(ASCellNode.self, a[1])
@@ -146,7 +147,7 @@ extension Reactive where Base: ASCollectionNode {
146147
/// collectionNode.rx.modelSelected(MyModel.self)
147148
/// .map { ...
148149
/// ```
149-
public func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
150+
func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
150151
let source: Observable<T> = itemSelected.flatMap { [weak view = self.base as ASCollectionNode] indexPath -> Observable<T> in
151152
guard let view = view else {
152153
return Observable.empty()
@@ -167,7 +168,7 @@ extension Reactive where Base: ASCollectionNode {
167168
/// collectionNode.rx.modelDeselected(MyModel.self)
168169
/// .map { ...
169170
/// ```
170-
public func modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
171+
func modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
171172
let source: Observable<T> = itemDeselected.flatMap { [weak view = self.base as ASCollectionNode] indexPath -> Observable<T> in
172173
guard let view = view else {
173174
return Observable.empty()
@@ -180,7 +181,7 @@ extension Reactive where Base: ASCollectionNode {
180181
}
181182

182183
/// Synchronous helper method for retrieving a model at indexPath through a reactive data source
183-
public func model<T>(at indexPath: IndexPath) throws -> T {
184+
func model<T>(at indexPath: IndexPath) throws -> T {
184185
let dataSource: SectionedViewDataSourceType = castOrFatalError(self.dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx.itemsWith*` methods was used.")
185186

186187
let element = try dataSource.model(at: indexPath)

Sources/DataSources/RxProxies/RxASTableDelegateProxy.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class RxASTableDelegateProxy: DelegateProxy, DelegateProxyType, ASTableDe
3535
}
3636
}
3737

38-
extension Reactive where Base: ASTableNode {
38+
public extension Reactive where Base: ASTableNode {
3939

4040
var delegate: DelegateProxy {
4141
return RxASTableDelegateProxy.proxyForObject(base)
@@ -56,7 +56,7 @@ extension Reactive where Base: ASTableNode {
5656
/**
5757
Reactive wrapper for `delegate` message `tableNode:didSelectRowAtIndexPath:`.
5858
*/
59-
public var itemSelected: ControlEvent<IndexPath> {
59+
var itemSelected: ControlEvent<IndexPath> {
6060
let source = self.delegate.methodInvoked(#selector(ASTableDelegate.tableNode(_:didSelectRowAt:)))
6161
.map { a in
6262
return try castOrThrow(IndexPath.self, a[1])
@@ -68,7 +68,7 @@ extension Reactive where Base: ASTableNode {
6868
/**
6969
Reactive wrapper for `delegate` message `tableNode:didDeselectRowAtIndexPath:`.
7070
*/
71-
public var itemDeselected: ControlEvent<IndexPath> {
71+
var itemDeselected: ControlEvent<IndexPath> {
7272
let source = self.delegate.methodInvoked(#selector(ASTableDelegate.tableNode(_:didDeselectRowAt:)))
7373
.map { a in
7474
return try castOrThrow(IndexPath.self, a[1])
@@ -80,7 +80,7 @@ extension Reactive where Base: ASTableNode {
8080
/**
8181
Reactive wrapper for `delegate` message `tableNode:commitEditingStyle:forRowAtIndexPath:`.
8282
*/
83-
public var itemInserted: ControlEvent<IndexPath> {
83+
var itemInserted: ControlEvent<IndexPath> {
8484
let source = self.dataSource.methodInvoked(#selector(ASTableDataSource.tableView(_:commit:forRowAt:)))
8585
.filter { a in
8686
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .insert
@@ -95,7 +95,7 @@ extension Reactive where Base: ASTableNode {
9595
/**
9696
Reactive wrapper for `delegate` message `tableNode:commitEditingStyle:forRowAtIndexPath:`.
9797
*/
98-
public var itemDeleted: ControlEvent<IndexPath> {
98+
var itemDeleted: ControlEvent<IndexPath> {
9999
let source = self.dataSource.methodInvoked(#selector(ASTableDataSource.tableView(_:commit:forRowAt:)))
100100
.filter { a in
101101
return UITableViewCellEditingStyle(rawValue: (try castOrThrow(NSNumber.self, a[1])).intValue) == .delete
@@ -110,7 +110,7 @@ extension Reactive where Base: ASTableNode {
110110
/**
111111
Reactive wrapper for `delegate` message `tableNode:moveRowAtIndexPath:toIndexPath:`.
112112
*/
113-
public var itemMoved: ControlEvent<ItemMovedEvent> {
113+
var itemMoved: ControlEvent<ItemMovedEvent> {
114114
let source: Observable<ItemMovedEvent> = self.dataSource.methodInvoked(#selector(ASTableDataSource.tableView(_:moveRowAt:to:)))
115115
.map { a in
116116
return (try castOrThrow(IndexPath.self, a[1]), try castOrThrow(IndexPath.self, a[2]))
@@ -122,7 +122,7 @@ extension Reactive where Base: ASTableNode {
122122
/**
123123
Reactive wrapper for `delegate` message `tableNode:willDisplayCell:forRowAtIndexPath:`.
124124
*/
125-
public var willDisplayCell: ControlEvent<ASCellNode> {
125+
var willDisplayCell: ControlEvent<ASCellNode> {
126126
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASTableDelegate.tableNode(_:willDisplayRowWith:)))
127127
.map { a in
128128
return try castOrThrow(ASCellNode.self, a[1])
@@ -134,7 +134,7 @@ extension Reactive where Base: ASTableNode {
134134
/**
135135
Reactive wrapper for `delegate` message `tableNode:didEndDisplayingCell:forRowAtIndexPath:`.
136136
*/
137-
public var didEndDisplayingCell: ControlEvent<ASCellNode> {
137+
var didEndDisplayingCell: ControlEvent<ASCellNode> {
138138
let source: Observable<ASCellNode> = self.delegate.methodInvoked(#selector(ASTableDelegate.tableNode(_:didEndDisplayingRowWith:)))
139139
.map { a in
140140
return try castOrThrow(ASCellNode.self, a[1])
@@ -154,7 +154,7 @@ extension Reactive where Base: ASTableNode {
154154
.map { ...
155155
```
156156
*/
157-
public func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
157+
func modelSelected<T>(_ modelType: T.Type) -> ControlEvent<T> {
158158
let source: Observable<T> = self.itemSelected.flatMap { [weak view = self.base as ASTableNode] indexPath -> Observable<T> in
159159
guard let view = view else {
160160
return Observable.empty()
@@ -177,7 +177,7 @@ extension Reactive where Base: ASTableNode {
177177
.map { ...
178178
```
179179
*/
180-
public func modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
180+
func modelDeselected<T>(_ modelType: T.Type) -> ControlEvent<T> {
181181
let source: Observable<T> = self.itemDeselected.flatMap { [weak view = self.base as ASTableNode] indexPath -> Observable<T> in
182182
guard let view = view else {
183183
return Observable.empty()
@@ -200,7 +200,7 @@ extension Reactive where Base: ASTableNode {
200200
.map { ...
201201
```
202202
*/
203-
public func modelDeleted<T>(_ modelType: T.Type) -> ControlEvent<T> {
203+
func modelDeleted<T>(_ modelType: T.Type) -> ControlEvent<T> {
204204
let source: Observable<T> = self.itemDeleted.flatMap { [weak view = self.base as ASTableNode] indexPath -> Observable<T> in
205205
guard let view = view else {
206206
return Observable.empty()
@@ -215,12 +215,12 @@ extension Reactive where Base: ASTableNode {
215215
/**
216216
Synchronous helper method for retrieving a model at indexPath through a reactive data source.
217217
*/
218-
public func model<T>(at indexPath: IndexPath) throws -> T {
218+
func model<T>(at indexPath: IndexPath) throws -> T {
219219
let dataSource: SectionedViewDataSourceType = castOrFatalError(self.dataSource.forwardToDelegate(), message: "This method only works in case one of the `rx.items*` methods was used.")
220-
220+
221221
let element = try dataSource.model(at: indexPath)
222222

223223
return castOrFatalError(element)
224224
}
225-
225+
226226
}

0 commit comments

Comments
 (0)