Skip to content

Commit f75acb4

Browse files
authored
Merge pull request #7 from ReactiveCocoa/anders/consolidate-api
Merge `Store` and `FeedbackLoop` API. Rename it to `Loop`.
2 parents 4004155 + 5c1e7aa commit f75acb4

20 files changed

+363
-217
lines changed

Example/MultiStoreExample/PaginationViewController.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ final class PaginationViewController: UIViewController {
1313

1414
override func viewDidLoad() {
1515
super.viewDidLoad()
16-
viewModel.state.producer.startWithValues(contentView.render)
16+
viewModel.store.context.startWithValues(contentView.render)
1717
}
1818
}
1919

2020
extension Movies {
21-
final class ViewModel: Store<State, Event> {
21+
final class ViewModel {
22+
let store: Loop<State, Event>
23+
2224
init() {
23-
super.init(
25+
store = .init(
2426
initial: Movies.State(),
2527
reducer: Movies.reduce,
2628
feedbacks: [Movies.feedback]

Example/MultiStoreExample/TextInputViewController.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ class TextInputViewController: UIViewController {
3131

3232
override func viewDidLoad() {
3333
super.viewDidLoad()
34-
viewModel.state.start()
35-
34+
3635
textView.reactive.continuousTextValues
3736
.take(duringLifetimeOf: self)
3837
.observeValues { [viewModel] in viewModel.textDidChange($0) }
@@ -51,13 +50,13 @@ class TextInputViewController: UIViewController {
5150
}
5251

5352
final class TextInputViewModel {
54-
let state: FeedbackLoop<String, Event>
53+
let state: Loop<String, Event>
5554
private let (text, textObserver) = Signal<String, Never>.pipe()
5655

5756
init() {
58-
self.state = FeedbackLoop<String, Event>(
57+
self.state = Loop<String, Event>(
5958
initial: "Lorem ipsum ",
60-
reduce: TextInputViewModel.reduce,
59+
reducer: TextInputViewModel.reduce,
6160
feedbacks: [.custom { [text] (state, consumer) in
6261
text.producer.map(Event.update).enqueue(to: consumer).start()
6362
}]

Example/MultiStoreExample/ViewController.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ class ViewController: UIViewController {
1616

1717
override func viewDidLoad() {
1818
super.viewDidLoad()
19-
viewModel.state.producer.startWithValues(contentView.render)
19+
viewModel.store.context.startWithValues(contentView.render)
2020
}
2121
}
2222

2323
extension Counter {
24-
final class ViewModel: Store<State, Event> {
24+
final class ViewModel {
25+
let store: Loop<State, Event>
26+
2527
init() {
26-
super.init(
28+
store = .init(
2729
initial: State(),
2830
reducer: Counter.reduce,
2931
feedbacks: []

Example/SingleStoreExample/ColorPicker/ColorPickerView.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import UIKit
22
import Loop
33

44
final class ColorPickerViewController: ContainerViewController<ColorPickerView> {
5-
private let store: Store<ColorPicker.State, ColorPicker.Event>
5+
private let store: Loop<ColorPicker.State, ColorPicker.Event>
66

7-
init(store: Store<ColorPicker.State, ColorPicker.Event>) {
7+
init(store: Loop<ColorPicker.State, ColorPicker.Event>) {
88
self.store = store
99
super.init()
1010
}
@@ -15,13 +15,18 @@ final class ColorPickerViewController: ContainerViewController<ColorPickerView>
1515

1616
override func viewDidLoad() {
1717
super.viewDidLoad()
18-
store.state.producer.startWithValues(contentView.render)
18+
19+
store.context.startWithValues(contentView.render)
20+
contentView.didSelect.action = { [weak self] in
21+
self?.navigationController?.popViewController(animated: true)
22+
}
1923
}
2024
}
2125

2226
final class ColorPickerView: UIView, NibLoadable {
2327
@IBOutlet var stackView: UIStackView!
2428
let didTapButton = CommandWith<UIColor>()
29+
let didSelect = Command()
2530

2631
func render(context: Context<ColorPicker.State, ColorPicker.Event>) {
2732
zip(stackView.arrangedSubviews, context.colors).forEach { (view, color) in
@@ -34,5 +39,6 @@ final class ColorPickerView: UIView, NibLoadable {
3439

3540
@IBAction func didTapButton(sender: UIButton) {
3641
didTapButton.action(sender.backgroundColor ?? .clear)
42+
didSelect.action()
3743
}
3844
}

Example/SingleStoreExample/Counter/CounterView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ import UIKit
22
import Loop
33

44
final class CounterViewController: ContainerViewController<CounterView> {
5-
private let store: Store<Counter.State, Counter.Event>
5+
private let store: Loop<Counter.State, Counter.Event>
66

7-
init(store: Store<Counter.State, Counter.Event>) {
7+
init(store: Loop<Counter.State, Counter.Event>) {
88
self.store = store
99
super.init()
1010
}
1111

1212
override func viewDidLoad() {
1313
super.viewDidLoad()
14-
store.state.producer.startWithValues(contentView.render)
14+
store.context.startWithValues(contentView.render)
1515
}
1616

1717
required init?(coder: NSCoder) {

Example/SingleStoreExample/Movies/Movies.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ enum Movies {
107107
}
108108
}
109109

110-
static var feedback: FeedbackLoop<State, Event>.Feedback {
110+
static var feedback: Loop<State, Event>.Feedback {
111111
return .combine(
112112
pagingFeedback(),
113113
retryPagingFeedback()
@@ -146,8 +146,8 @@ enum Movies {
146146
}
147147
}
148148

149-
private static func pagingFeedback() -> FeedbackLoop<State, Event>.Feedback {
150-
return FeedbackLoop<State, Event>.Feedback(skippingRepeated: { $0.nextPage }) { nextPage in
149+
private static func pagingFeedback() -> Loop<State, Event>.Feedback {
150+
return Loop<State, Event>.Feedback(skippingRepeated: { $0.nextPage }) { nextPage in
151151
return URLSession.shared.fetchMovies(page: nextPage)
152152
.observe(on: UIScheduler())
153153
.map(Event.response)
@@ -157,7 +157,7 @@ enum Movies {
157157
}
158158
}
159159

160-
private static func retryPagingFeedback() -> FeedbackLoop<State, Event>.Feedback {
160+
private static func retryPagingFeedback() -> Loop<State, Event>.Feedback {
161161
return .init(skippingRepeated: { $0.retryPage }) { nextPage in
162162
URLSession.shared.fetchMovies(page: nextPage)
163163
.observe(on: UIScheduler())

Example/SingleStoreExample/Movies/MoviesView.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import UIKit
22
import Loop
33

44
final class MoviesViewController: ContainerViewController<MoviesView> {
5-
private let store: Store<Movies.State, Movies.Event>
5+
private let store: Loop<Movies.State, Movies.Event>
66

7-
init(store: Store<Movies.State, Movies.Event>) {
7+
init(store: Loop<Movies.State, Movies.Event>) {
88
self.store = store
99
super.init()
1010
}
1111

1212
override func viewDidLoad() {
1313
super.viewDidLoad()
14-
store.state.producer.startWithValues(contentView.render)
14+
store.context.startWithValues(contentView.render)
1515
contentView.didSelectItem.action = { [unowned self] movie in
1616
let nc = self.navigationController!
1717
let vc = ColorPickerViewController(
18-
store: self.store.view(
19-
value: \.colorPicker,
18+
store: self.store.scoped(
19+
to: \.colorPicker,
2020
event: Movies.Event.picker
2121
)
2222
)

Example/SingleStoreExample/RootViewController.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import ReactiveSwift
33
import UIKit
44

55
final class RootViewController: UITabBarController {
6-
private let store: Store<State, Event>
6+
private let store: Loop<State, Event>
77

88
init() {
99
let appReducer: Reducer<State, Event> = combine(
@@ -19,14 +19,14 @@ final class RootViewController: UITabBarController {
1919
)
2020
)
2121

22-
let appFeedbacks: FeedbackLoop<State, Event>.Feedback = FeedbackLoop<State, Event>.Feedback.combine(
23-
FeedbackLoop<State, Event>.Feedback.pullback(
22+
let appFeedbacks: Loop<State, Event>.Feedback = Loop<State, Event>.Feedback.combine(
23+
Loop<State, Event>.Feedback.pullback(
2424
feedback: Movies.feedback,
2525
value: \.movies,
2626
event: Event.movies
2727
)
2828
)
29-
store = Store(
29+
store = Loop(
3030
initial: State(),
3131
reducer: appReducer,
3232
feedbacks: [appFeedbacks]
@@ -41,14 +41,14 @@ final class RootViewController: UITabBarController {
4141
override func viewDidLoad() {
4242
super.viewDidLoad()
4343
let counterVC = CounterViewController(
44-
store: store.view(
45-
value: \.counter,
44+
store: store.scoped(
45+
to: \.counter,
4646
event: Event.counter
4747
)
4848
)
4949
let moviesVC = MoviesViewController(
50-
store: store.view(
51-
value: \.movies,
50+
store: store.scoped(
51+
to: \.movies,
5252
event: Event.movies
5353
)
5454
)

0 commit comments

Comments
 (0)