Commit 2cba1e0 1 parent 7fcee7f commit 2cba1e0 Copy full SHA for 2cba1e0
File tree 3 files changed +30
-2
lines changed
3 files changed +30
-2
lines changed Original file line number Diff line number Diff line change
1
+ ** * Unreleased* ** :
2
+ - fix: ` displayed ` and ` rxVisible ` now do not assume UIViewController starts not visible
3
+
1
4
** Version 2.13.0 ** :
2
5
3
6
- fix: use xcframeworks for RxFlow/RxFlowDemo deps to please Carthage
Original file line number Diff line number Diff line change @@ -31,8 +31,9 @@ public extension Reactive where Base: UIViewController {
31
31
var displayed : Observable < Bool > {
32
32
let viewDidAppearObservable = self . sentMessage ( #selector( Base . viewDidAppear) ) . map { _ in true }
33
33
let viewDidDisappearObservable = self . sentMessage ( #selector( Base . viewDidDisappear) ) . map { _ in false }
34
- // a UIViewController is at first not displayed
35
- let initialState = Observable . just ( false )
34
+ let initialState = Observable . deferred {
35
+ . just( base. viewIfLoaded? . window != nil )
36
+ }
36
37
// future calls to viewDidAppear and viewDidDisappear will change the displayable state
37
38
return initialState. concat ( Observable< Bool> . merge( viewDidAppearObservable, viewDidDisappearObservable) )
38
39
}
Original file line number Diff line number Diff line change @@ -42,6 +42,30 @@ final class UIViewController_PresentableTests: XCTestCase {
42
42
}
43
43
}
44
44
45
+ func testUIViewControllerVisibleStartsVisible( ) {
46
+ // Given: a UIViewController that starts "displayed"
47
+ let window = UIWindow ( )
48
+ let viewController = TestUIViewController ( )
49
+ _ = viewController. view
50
+ window. rootViewController = viewController
51
+ window. makeKeyAndVisible ( )
52
+ let testScheduler = TestScheduler ( initialClock: 0 )
53
+ let observer = testScheduler. createObserver ( Bool . self)
54
+ testScheduler. start ( )
55
+
56
+ // When: subscribing to rxVisible
57
+ _ = viewController. rxVisible. asObservable ( ) . take ( until: self . rx. deallocating) . bind ( to: observer)
58
+
59
+ // Then: rxVisible emits the first value as true
60
+ let referenceVisible = [ true ]
61
+ XCTAssertEqual ( observer. events. count, 1 )
62
+ var index = 0
63
+ referenceVisible. forEach {
64
+ XCTAssertEqual ( observer. events [ index] . value. element, $0)
65
+ index += 1
66
+ }
67
+ }
68
+
45
69
func testUIViewControllerDismissed( ) {
46
70
// Given: a UIViewController
47
71
let viewController = TestUIViewController ( )
You can’t perform that action at this time.
0 commit comments