Skip to content

Commit b988b01

Browse files
authored
Merge pull request #6 from RxSwiftCommunity/develop/lifecycle
Add lifecycle signal in RxViewModel
2 parents 6c779d6 + 9b393b1 commit b988b01

File tree

4 files changed

+65
-15
lines changed

4 files changed

+65
-15
lines changed

Example/Podfile.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ PODS:
66
- Reusable/View (= 4.1.1)
77
- Reusable/Storyboard (4.1.1)
88
- Reusable/View (4.1.1)
9-
- RxBinding (0.3.1):
10-
- RxCocoa (~> 5)
11-
- RxSwift (~> 5)
9+
- RxBinding (0.4):
10+
- RxCocoa (< 6.0.0, >= 5.0.0)
11+
- RxSwift (< 6.0.0, >= 5.0.0)
1212
- RxCocoa (5.1.1):
1313
- RxRelay (~> 5)
1414
- RxSwift (~> 5)
15-
- RxController (0.10):
15+
- RxController (1.1):
1616
- RxCocoa (~> 5)
1717
- RxFlow (~> 2.7)
1818
- RxSwift (~> 5)
@@ -25,7 +25,7 @@ PODS:
2525
- RxCocoa (~> 5)
2626
- RxDataSources (~> 4)
2727
- RxSwift (~> 5)
28-
- RxFlow (2.8.0):
28+
- RxFlow (2.9.1):
2929
- RxCocoa (>= 5.1.1)
3030
- RxSwift (>= 5.1.1)
3131
- RxRelay (5.1.1):
@@ -62,16 +62,16 @@ SPEC CHECKSUMS:
6262
Differentiator: 886080237d9f87f322641dedbc5be257061b0602
6363
Fakery: d3380c4aa1efe7631c0831d7e26aa9db4491f014
6464
Reusable: 53a9acf5c536f229b31b5865782414b508252ddb
65-
RxBinding: 58be2cf1311165489a66eacb4a3e33932d598a53
65+
RxBinding: da433c012633802a72c2a5bec8775b86f4cddeb8
6666
RxCocoa: 32065309a38d29b5b0db858819b5bf9ef038b601
67-
RxController: c596ce5b2bc9ab933649690838d60118f0e4b110
67+
RxController: f4b42f77e2298a81720de4fc4580e10b38ea0b69
6868
RxDataSources: efee07fa4de48477eca0a4611e6d11e2da9c1114
6969
RxDataSourcesSingleSection: 4394e57ae097f33e3845cf3a57bdf7826eca2d38
70-
RxFlow: 41c9d56e7611c6470d00febdfee08b63b0b018f8
70+
RxFlow: 029e260333ef843b349ba9cb9265929941830aee
7171
RxRelay: d77f7d771495f43c556cbc43eebd1bb54d01e8e9
7272
RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178
7373
SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
7474

7575
PODFILE CHECKSUM: 0e048f42166325ac7ea57547d12ebbc2fc47fb5f
7676

77-
COCOAPODS: 1.9.1
77+
COCOAPODS: 1.9.3

RxController.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = 'RxController'
11-
s.version = '1.0'
11+
s.version = '1.1'
1212
s.summary = 'A library for developing with MVVM-C based on RxFlow and RxSwift.'
1313

1414
# This description is used to generate tags and improve search results.

RxController/Classes/RxViewController.swift

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,37 @@ open class RxViewController<ViewModel: RxViewModel>: UIViewController, RxViewCon
5656
open override func viewDidLoad() {
5757
super.viewDidLoad()
5858

59+
viewModel.viewDidLoadSubject.onNext(())
60+
5961
subviews().forEach { view.addSubview($0) }
6062
createConstraints()
6163
bind().forEach { $0.disposed(by: disposeBag) }
6264
}
6365

66+
open override func viewWillAppear(_ animated: Bool) {
67+
super.viewWillAppear(animated)
68+
69+
viewModel.viewWillAppearSubject.onNext(())
70+
}
71+
72+
open override func viewDidAppear(_ animated: Bool) {
73+
super.viewDidAppear(animated)
74+
75+
viewModel.viewDidAppearSubject.onNext(())
76+
}
77+
78+
open override func viewWillDisappear(_ animated: Bool) {
79+
super.viewWillDisappear(animated)
80+
81+
viewModel.viewWillDisappearSubject.onNext(())
82+
}
83+
84+
open override func viewDidDisappear(_ animated: Bool) {
85+
super.viewDidDisappear(animated)
86+
87+
viewModel.viewDidDisappearSubject.onNext(())
88+
}
89+
6490
open func subviews() -> [UIView] {
6591
Log.debug("[WARNING] \(type(of: self)).subview() has not been overrided")
6692
return []
@@ -74,10 +100,9 @@ open class RxViewController<ViewModel: RxViewModel>: UIViewController, RxViewCon
74100
Log.debug("[WARNING] \(type(of: self)).bind() has not been overrided.")
75101
return []
76102
}
77-
103+
78104
/**
79105
Add a child view controller to the root view of the parent view controller.
80-
81106
@param childController: a child view controller.
82107
*/
83108
override open func addChild(_ childController: UIViewController) {
@@ -89,11 +114,11 @@ open class RxViewController<ViewModel: RxViewModel>: UIViewController, RxViewCon
89114
guard let childController = childController as? RxViewControllerProtocol else { return }
90115
viewModel.addChild(childController.rxViewModel)
91116
}
92-
117+
93118
/**
94119
Add a child view controller to the a container view of the parent view controller.
95120
The edges of the child view controller is same as the container view by default.
96-
121+
97122
@param childController: a child view controller.
98123
@param containerView: a container view of childController.
99124
*/
@@ -102,7 +127,7 @@ open class RxViewController<ViewModel: RxViewModel>: UIViewController, RxViewCon
102127
// Add child view controller to a container view of the parent view controller.
103128
containerView.addSubview(childController.view)
104129
childController.didMove(toParent: self)
105-
130+
106131
// Create constraints for the root view of the child view controller.
107132
childController.view.translatesAutoresizingMaskIntoConstraints = false
108133
childController.view.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true

RxController/Classes/RxViewModel.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ import RxFlow
2929

3030
open class RxViewModel: NSObject, Stepper {
3131

32+
let viewDidLoadSubject = PublishSubject<Void>()
33+
let viewWillAppearSubject = PublishSubject<Void>()
34+
let viewDidAppearSubject = PublishSubject<Void>()
35+
let viewWillDisappearSubject = PublishSubject<Void>()
36+
let viewDidDisappearSubject = PublishSubject<Void>()
37+
3238
public let steps = PublishRelay<Step>()
3339
public let events = PublishRelay<RxControllerEvent>()
3440
public let disposeBag = DisposeBag()
@@ -97,6 +103,25 @@ open class RxViewModel: NSObject, Stepper {
97103
return events
98104
}
99105

106+
public var viewDidLoad: Observable<Void> {
107+
viewDidLoadSubject.asObservable()
108+
}
109+
110+
public var viewWillAppear: Observable<Void> {
111+
viewWillAppearSubject.asObservable()
112+
}
113+
114+
public var viewDidAppear: Observable<Void> {
115+
viewDidAppearSubject.asObservable()
116+
}
117+
118+
public var viewWillDisappear: Observable<Void> {
119+
viewWillDisappearSubject.asObservable()
120+
}
121+
122+
public var viewDidDisappear: Observable<Void> {
123+
viewDidDisappearSubject.asObservable()
124+
}
100125
}
101126

102127
extension RxViewModel: RxControllerEventBinder {}

0 commit comments

Comments
 (0)