Files
swift-composable-architectu…/Examples/CaseStudies/UIKitCaseStudies/Internal/IfLetStoreController.swift
aladdin a792049575 Hide UIViewController method/properties in UIKit Example code (#3238)
* refactor: hide decrementButtonTapped function

* refactor: hide incrementButtonTapped function

* refactor: hide CounterViewController's store

* refactor: hide CountersTableViewController's store

* refactor: hide EagerNavigationViewController's store

* refactor: hide LazyNavigationViewController's store

* refactor: hide IfLetStoreController's stored properties
2024-07-14 12:00:38 -04:00

53 lines
1.4 KiB
Swift

import Combine
import ComposableArchitecture
import UIKit
final class IfLetStoreController<State, Action>: UIViewController {
private let store: Store<State?, Action>
private let ifDestination: (Store<State, Action>) -> UIViewController
private let elseDestination: () -> UIViewController
private var cancellables: Set<AnyCancellable> = []
private var viewController = UIViewController() {
willSet {
viewController.willMove(toParent: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParent()
addChild(newValue)
view.addSubview(newValue.view)
newValue.didMove(toParent: self)
}
}
init(
_ store: Store<State?, Action>,
then ifDestination: @escaping (Store<State, Action>) -> UIViewController,
else elseDestination: @escaping () -> UIViewController
) {
self.store = store
self.ifDestination = ifDestination
self.elseDestination = elseDestination
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
store.ifLet(
then: { [weak self] store in
guard let self else { return }
viewController = ifDestination(store)
},
else: { [weak self] in
guard let self else { return }
viewController = elseDestination()
}
)
.store(in: &cancellables)
}
}