Skip to content

Commit 29ffa26

Browse files
authored
Merge pull request #18 from ra1028/lazy-target-assigning
Lazy target assigning
2 parents ccd9019 + 65d6b80 commit 29ffa26

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+294
-120
lines changed

Carbon.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
6B7ADEF421FDB12B003803BE /* UITableViewComponentHeaderFooterViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7ADEF021FDB12A003803BE /* UITableViewComponentHeaderFooterViewTests.swift */; };
5757
6B7EED9E224CA5DD00060872 /* UIScrollViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7EED9D224CA5DD00060872 /* UIScrollViewExtensions.swift */; };
5858
6B7EEDA0224CE4E100060872 /* UIScrollViewExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7EED9F224CE4E000060872 /* UIScrollViewExtensionsTests.swift */; };
59+
6BAEA3DA2289C5D10026F81E /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BAEA3D92289C5D10026F81E /* Deprecated.swift */; };
5960
/* End PBXBuildFile section */
6061

6162
/* Begin PBXContainerItemProxy section */
@@ -122,6 +123,7 @@
122123
6B7ADEF021FDB12A003803BE /* UITableViewComponentHeaderFooterViewTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewComponentHeaderFooterViewTests.swift; sourceTree = "<group>"; };
123124
6B7EED9D224CA5DD00060872 /* UIScrollViewExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIScrollViewExtensions.swift; sourceTree = "<group>"; };
124125
6B7EED9F224CE4E000060872 /* UIScrollViewExtensionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIScrollViewExtensionsTests.swift; sourceTree = "<group>"; };
126+
6BAEA3D92289C5D10026F81E /* Deprecated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Deprecated.swift; sourceTree = "<group>"; };
125127
/* End PBXFileReference section */
126128

127129
/* Begin PBXFrameworksBuildPhase section */
@@ -175,6 +177,7 @@
175177
6B65949021E2532100291AAF /* Section.swift */,
176178
6B6594A321E2532100291AAF /* Renderer.swift */,
177179
6B5304522201EDB200A3E21E /* DataChangeset.swift */,
180+
6BAEA3D92289C5D10026F81E /* Deprecated.swift */,
178181
6B65948921E2532100291AAF /* Adapters */,
179182
6B65949221E2532100291AAF /* Updaters */,
180183
6B65949D21E2532100291AAF /* Interfaces */,
@@ -439,6 +442,7 @@
439442
isa = PBXSourcesBuildPhase;
440443
buildActionMask = 2147483647;
441444
files = (
445+
6BAEA3DA2289C5D10026F81E /* Deprecated.swift in Sources */,
442446
6B6594BB21E2532100291AAF /* UITableViewComponentHeaderFooterView.swift in Sources */,
443447
6B7EED9E224CA5DD00060872 /* UIScrollViewExtensions.swift in Sources */,
444448
6B6594AC21E2532100291AAF /* Section.swift in Sources */,

Examples/Example-iOS/Sources/Emoji/EmojiViewController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ final class EmojiViewController: UIViewController {
99
@IBOutlet var collectionView: UICollectionView!
1010
@IBOutlet var toolBar: UIToolbar!
1111

12-
private lazy var renderer = Renderer(
13-
target: collectionView,
12+
private let renderer = Renderer(
1413
adapter: UICollectionViewFlowLayoutAdapter(),
1514
updater: UICollectionViewUpdater()
1615
)
@@ -25,6 +24,8 @@ final class EmojiViewController: UIViewController {
2524
title = "Shuffle Emoji"
2625
toolBar.isTranslucent = false
2726
collectionView.contentInset.bottom = 44
27+
28+
renderer.target = collectionView
2829
renderer.updater.alwaysRenderVisibleComponents = true
2930

3031
refresh()

Examples/Example-iOS/Sources/Form/FormViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ final class FormViewController: UIViewController {
3636
didSet { render() }
3737
}
3838

39-
private lazy var renderer = Renderer(
40-
target: tableView,
39+
private let renderer = Renderer(
4140
adapter: UITableViewAdapter(),
4241
updater: UITableViewUpdater()
4342
)
@@ -50,6 +49,7 @@ final class FormViewController: UIViewController {
5049
tableView.estimatedRowHeight = UITableView.automaticDimension
5150
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeFrame), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
5251

52+
renderer.target = tableView
5353
renderer.updater.deleteRowsAnimation = .middle
5454
renderer.updater.insertRowsAnimation = .middle
5555
renderer.updater.insertSectionsAnimation = .top

Examples/Example-iOS/Sources/Hello/HelloViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ final class HelloViewController: UIViewController {
1212
didSet { render() }
1313
}
1414

15-
private lazy var renderer = Renderer(
16-
target: tableView,
15+
private let renderer = Renderer(
1716
adapter: UITableViewAdapter(),
1817
updater: UITableViewUpdater()
1918
)
@@ -23,6 +22,7 @@ final class HelloViewController: UIViewController {
2322

2423
title = "Hello"
2524
tableView.contentInset.top = 44
25+
renderer.target = tableView
2626

2727
render()
2828
}

Examples/Example-iOS/Sources/Kyoto/KyotoViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ final class KyotoViewController: UIViewController {
99

1010
@IBOutlet var collectionView: UICollectionView!
1111

12-
private lazy var renderer = Renderer(
13-
target: collectionView,
12+
private let renderer = Renderer(
1413
adapter: UICollectionViewFlowLayoutAdapter(),
1514
updater: UICollectionViewUpdater()
1615
)
@@ -21,6 +20,7 @@ final class KyotoViewController: UIViewController {
2120
title = "Kyoto"
2221
collectionView.contentInset.bottom = 24
2322

23+
renderer.target = collectionView
2424
renderer.render(
2525
Section(
2626
id: ID.top,

Examples/Example-iOS/Sources/Pangram/PangramViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ final class PangramViewController: UIViewController {
55
@IBOutlet var collectionView: UICollectionView!
66
@IBOutlet var toolBar: UIToolbar!
77

8-
private lazy var renderer = Renderer(
9-
target: collectionView,
8+
private let renderer = Renderer(
109
adapter: UICollectionViewFlowLayoutAdapter(),
1110
updater: UICollectionViewUpdater()
1211
)
@@ -21,6 +20,7 @@ final class PangramViewController: UIViewController {
2120
title = "Pangram"
2221
toolBar.isTranslucent = false
2322
collectionView.contentInset.top = 44
23+
renderer.target = collectionView
2424

2525
render()
2626
}

Examples/Example-iOS/Sources/Todo/TodoViewController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ final class TodoViewController: UIViewController, UITextViewDelegate {
2323
didSet { render() }
2424
}
2525

26-
private lazy var renderer = Renderer(
27-
target: tableView,
26+
private let renderer = Renderer(
2827
adapter: TodoTableViewAdapter(),
2928
updater: UITableViewUpdater()
3029
)
@@ -42,6 +41,8 @@ final class TodoViewController: UIViewController, UITextViewDelegate {
4241
tableView.rowHeight = UITableView.automaticDimension
4342
tableView.estimatedRowHeight = UITableView.automaticDimension
4443
tableView.contentInset.bottom = view.bounds.height - addButton.frame.minY
44+
45+
renderer.target = tableView
4546
renderer.updater.skipReloadComponents = true
4647
renderer.updater.alwaysRenderVisibleComponents = true
4748

Examples/Example-iOS/Sources/Top/HomeViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ final class HomeViewController: UIViewController {
1717

1818
@IBOutlet var tableView: UITableView!
1919

20-
private lazy var renderer = Renderer(
21-
target: tableView,
20+
private let renderer = Renderer(
2221
adapter: UITableViewAdapter(),
2322
updater: UITableViewUpdater()
2423
)
@@ -28,6 +27,7 @@ final class HomeViewController: UIViewController {
2827

2928
title = "Home"
3029

30+
renderer.target = tableView
3131
renderer.render(
3232
Section(
3333
id: ID.examples,

README.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,21 +195,31 @@ Since there are several style syntaxes for passing group of sections, please che
195195
```swift
196196
@IBOutlet var tableView: UITableView!
197197

198-
lazy var renderer = Renderer(
199-
target: tableView,
198+
let renderer = Renderer(
200199
adapter: UITableViewAdapter(),
201200
updater: UITableViewUpdater()
202201
)
202+
203+
override func viewDidAppear(_ animated: Bool) {
204+
super.viewDidAppear(animated)
205+
206+
renderer.target = tableView
207+
}
203208
```
204209

205210
```swift
206211
@IBOutlet var collectionView: UICollectionView!
207212

208-
lazy var renderer = Renderer(
209-
target: collectionView,
213+
let renderer = Renderer(
210214
adapter: UICollectionViewFlowLayoutAdapter(),
211215
updater: UICollectionViewUpdater()
212216
)
217+
218+
override func viewDidAppear(_ animated: Bool) {
219+
super.viewDidAppear(animated)
220+
221+
renderer.target = collectionView
222+
}
213223
```
214224

215225
```swift
@@ -397,6 +407,10 @@ Below are some of the default provided settings of `updater`.
397407
Indicating whether enables animation for diffing updates, setting `false` will perform it using `UIView.performWithoutAnimation`.
398408
Default is `true`.
399409

410+
- **isAnimationEnabledWhileScrolling**
411+
Indicating whether enables animation for diffing updates while target is scrolling, setting `false` will perform it using `UIView.performWithoutAnimation`.
412+
Default is `true`.
413+
400414
- **animatableChangeCount**
401415
The max number of changes to perform diffing updates. It falls back to `reloadData` if it exceeded.
402416
Default is `300`.

Sources/Deprecated.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
public extension Renderer {
2+
/// Create a new instance with given target, adapter and updater.
3+
/// Immediately the `prepare` of updater is called.
4+
@available(*, deprecated, message:"Use the `Renderer.init` that accepts only `adapter` and `updater` parameters, and set `target` at arbitrary timing.")
5+
convenience init(target: Updater.Target, adapter: Updater.Adapter, updater: Updater) {
6+
self.init(adapter: adapter, updater: updater)
7+
self.target = target
8+
updater.prepare(target: target, adapter: adapter)
9+
}
10+
}

0 commit comments

Comments
 (0)