Skip to content

Commit cfe6b60

Browse files
committed
- Better routing capabilities
- Bug fixes
1 parent 32ecba2 commit cfe6b60

24 files changed

Lines changed: 488 additions & 202 deletions

CONTRIBUTORS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
This is a list of all CoreNavigation contributors.
44

5-
* Your Name Here
5+
There are no contributors yet.

CoreNavigation.podspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
Pod::Spec.new do |spec|
22
spec.name = 'CoreNavigation'
33
spec.ios.deployment_target = '8.0'
4-
spec.version = '0.2.0'
4+
spec.version = '0.3.0'
55
spec.license = 'MIT'
66
spec.summary = 'A Swift navigation framework'
77
spec.author = 'Aron Balog'
88
spec.homepage = 'https://github.com/aronbalog/CoreNavigation'
9-
spec.source = { :git => 'https://github.com/aronbalog/CoreNavigation.git', :tag => '0.2.0' }
9+
spec.source = { :git => 'https://github.com/aronbalog/CoreNavigation.git', :tag => '0.3.0' }
1010
spec.requires_arc = true
1111
spec.xcconfig = { 'SWIFT_VERSION' => '4.0' }
1212

@@ -21,6 +21,6 @@ Pod::Spec.new do |spec|
2121
'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'ROUTING',
2222
}
2323
routing.dependency 'CoreNavigation/Core'
24-
routing.dependency 'CoreRoute', '~> 0.1.1'
24+
routing.dependency 'CoreRoute', '~> 0.2.2'
2525
end
2626
end

CoreNavigation.xcodeproj/project.pbxproj

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
383BE4DC1FCB67F400C17AE3 /* Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4DB1FCB67F400C17AE3 /* Cache.swift */; };
2929
383BE4DD1FCB680A00C17AE3 /* Lifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4D91FCB66F100C17AE3 /* Lifetime.swift */; };
3030
383BE4DE1FCB680C00C17AE3 /* Cachable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4DA1FCB66F100C17AE3 /* Cachable.swift */; };
31-
383BE4E61FCBA91200C17AE3 /* NavigationAction+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4E51FCBA91200C17AE3 /* NavigationAction+Routing.swift */; };
31+
383BE4E61FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4E51FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift */; };
3232
385718661FBDB33C0050810F /* UINavigationController+ViewControllerEmbedding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385718651FBDB33C0050810F /* UINavigationController+ViewControllerEmbedding.swift */; };
3333
385B9CCF1FEC5A06001306EC /* DataPassable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385B9CCE1FEC5A06001306EC /* DataPassable.swift */; };
3434
3865B9741FEE959700C3182E /* ResponseAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3865B9731FEE959700C3182E /* ResponseAware.swift */; };
@@ -56,7 +56,7 @@
5656
3865B98E1FEEA69B00C3182E /* ViewControllerEventable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4C81FCB4BC800C17AE3 /* ViewControllerEventable.swift */; };
5757
3865B98F1FEEA69B00C3182E /* Eventable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4CA1FCB4BE600C17AE3 /* Eventable.swift */; };
5858
3865B9901FEEA69B00C3182E /* ViewControllerEmbedding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E4584A1FAD0F5600134E74 /* ViewControllerEmbedding.swift */; };
59-
3865B9911FEEA6A400C3182E /* NavigationAction+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4E51FCBA91200C17AE3 /* NavigationAction+Routing.swift */; };
59+
3865B9911FEEA6A400C3182E /* NavigationConfiguration+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BE4E51FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift */; };
6060
3865B9921FEEA6A400C3182E /* Router+SharedInstance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381C01141FCCCCC700CA7531 /* Router+SharedInstance.swift */; };
6161
38814B02200EA3C900480711 /* ViewController_Purple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38814B01200EA3C900480711 /* ViewController_Purple.swift */; };
6262
38814B04200EBA0A00480711 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38814B03200EBA0A00480711 /* Auth.swift */; };
@@ -75,6 +75,8 @@
7575
38CBD2FD1FE7309300D495CE /* NavigationTest_Present.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38CBD2F71FE7309300D495CE /* NavigationTest_Present.swift */; };
7676
38CBD2FE1FE7309300D495CE /* NavigationTest_Push.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38CBD2F91FE7309300D495CE /* NavigationTest_Push.swift */; };
7777
38CBD2FF1FE7309300D495CE /* NavigationTest_Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38CBD2FB1FE7309300D495CE /* NavigationTest_Routing.swift */; };
78+
38D8232720228CD3003FA799 /* UIViewController+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38D8232620228CD3003FA799 /* UIViewController+Routing.swift */; };
79+
38D8232820228CD3003FA799 /* UIViewController+Routing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38D8232620228CD3003FA799 /* UIViewController+Routing.swift */; };
7880
38E458141FACFD4F00134E74 /* CoreNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E458121FACFD4F00134E74 /* CoreNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; };
7981
38E4582E1FACFE1C00134E74 /* Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E4582D1FACFE1C00134E74 /* Navigation.swift */; };
8082
38E4584B1FAD0F5600134E74 /* ViewControllerEmbedding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E4584A1FAD0F5600134E74 /* ViewControllerEmbedding.swift */; };
@@ -129,7 +131,7 @@
129131
383BE4D91FCB66F100C17AE3 /* Lifetime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lifetime.swift; sourceTree = "<group>"; };
130132
383BE4DA1FCB66F100C17AE3 /* Cachable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cachable.swift; sourceTree = "<group>"; };
131133
383BE4DB1FCB67F400C17AE3 /* Cache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = "<group>"; };
132-
383BE4E51FCBA91200C17AE3 /* NavigationAction+Routing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NavigationAction+Routing.swift"; sourceTree = "<group>"; };
134+
383BE4E51FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NavigationConfiguration+Routing.swift"; sourceTree = "<group>"; };
133135
385718651FBDB33C0050810F /* UINavigationController+ViewControllerEmbedding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+ViewControllerEmbedding.swift"; sourceTree = "<group>"; };
134136
385B9CCE1FEC5A06001306EC /* DataPassable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataPassable.swift; sourceTree = "<group>"; };
135137
3865B9731FEE959700C3182E /* ResponseAware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseAware.swift; sourceTree = "<group>"; };
@@ -152,6 +154,7 @@
152154
38CBD2F71FE7309300D495CE /* NavigationTest_Present.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationTest_Present.swift; sourceTree = "<group>"; };
153155
38CBD2F91FE7309300D495CE /* NavigationTest_Push.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationTest_Push.swift; sourceTree = "<group>"; };
154156
38CBD2FB1FE7309300D495CE /* NavigationTest_Routing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationTest_Routing.swift; sourceTree = "<group>"; };
157+
38D8232620228CD3003FA799 /* UIViewController+Routing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Routing.swift"; sourceTree = "<group>"; };
155158
38E4580F1FACFD4F00134E74 /* CoreNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
156159
38E458121FACFD4F00134E74 /* CoreNavigation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreNavigation.h; sourceTree = "<group>"; };
157160
38E458131FACFD4F00134E74 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -256,8 +259,9 @@
256259
383BE4E41FCBA90300C17AE3 /* Extensions */ = {
257260
isa = PBXGroup;
258261
children = (
259-
383BE4E51FCBA91200C17AE3 /* NavigationAction+Routing.swift */,
262+
383BE4E51FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift */,
260263
381C01141FCCCCC700CA7531 /* Router+SharedInstance.swift */,
264+
38D8232620228CD3003FA799 /* UIViewController+Routing.swift */,
261265
);
262266
path = Extensions;
263267
sourceTree = "<group>";
@@ -815,7 +819,7 @@
815819
3865B98E1FEEA69B00C3182E /* ViewControllerEventable.swift in Sources */,
816820
38E890552002CAF3006C1C67 /* ProtectionSpace.swift in Sources */,
817821
3865B9921FEEA6A400C3182E /* Router+SharedInstance.swift in Sources */,
818-
3865B9911FEEA6A400C3182E /* NavigationAction+Routing.swift in Sources */,
822+
3865B9911FEEA6A400C3182E /* NavigationConfiguration+Routing.swift in Sources */,
819823
3865B9891FEEA69B00C3182E /* DataPassable.swift in Sources */,
820824
38C518D71FE5E74400581709 /* Route_Orange.swift in Sources */,
821825
3865B97F1FEEA68B00C3182E /* Configuration.swift in Sources */,
@@ -824,6 +828,7 @@
824828
38814B02200EA3C900480711 /* ViewController_Purple.swift in Sources */,
825829
3865B9901FEEA69B00C3182E /* ViewControllerEmbedding.swift in Sources */,
826830
38814B04200EBA0A00480711 /* Auth.swift in Sources */,
831+
38D8232820228CD3003FA799 /* UIViewController+Routing.swift in Sources */,
827832
3808A414200C2991006FD933 /* StateRestorable.swift in Sources */,
828833
38C518D51FE5E73600581709 /* Destination.swift in Sources */,
829834
3865B9841FEEA68E00C3182E /* UINavigationController+TransitioningCompletion.swift in Sources */,
@@ -864,6 +869,7 @@
864869
383BE4C91FCB4BC800C17AE3 /* ViewControllerEventable.swift in Sources */,
865870
3808A413200C2991006FD933 /* StateRestorable.swift in Sources */,
866871
381C01151FCCCCC700CA7531 /* Router+SharedInstance.swift in Sources */,
872+
38D8232720228CD3003FA799 /* UIViewController+Routing.swift in Sources */,
867873
38F34B021FCB0D8C000F2696 /* UIViewController+VisibleViewController.swift in Sources */,
868874
383BE4C71FCB4BB100C17AE3 /* Transitionable.swift in Sources */,
869875
38392DB01FBCF66D00040EA8 /* Navigator.swift in Sources */,
@@ -885,7 +891,7 @@
885891
38392DB51FBD175000040EA8 /* Configuration.swift in Sources */,
886892
383BE4CB1FCB4BE600C17AE3 /* Eventable.swift in Sources */,
887893
383BE4D31FCB4E7D00C17AE3 /* ObjectAssociation.swift in Sources */,
888-
383BE4E61FCBA91200C17AE3 /* NavigationAction+Routing.swift in Sources */,
894+
383BE4E61FCBA91200C17AE3 /* NavigationConfiguration+Routing.swift in Sources */,
889895
);
890896
runOnlyForDeploymentPostprocessing = 0;
891897
};

CoreNavigation/Core/Classes/Action/NavigationAction.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ public class NavigationAction<FromViewController: UIViewController, ToViewContro
77
return cast(self, to: NavigationAction<FromViewController, ToViewController, EmbeddingViewController>.self)
88
}
99

10-
@discardableResult public func to<ToViewController>(_ viewController: ToViewController) -> NavigationAction<FromViewController, ToViewController, EmbeddingViewController> {
10+
@discardableResult override public func to<ToViewController>(_ viewController: ToViewController) -> NavigationAction<FromViewController, ToViewController, EmbeddingViewController> {
1111
configuration.destination.target = viewController
1212

1313
return cast(self, to: NavigationAction<FromViewController, ToViewController, EmbeddingViewController>.self)
1414
}
1515

16-
@discardableResult public func to<ToViewController>(_ viewControllerType: ToViewController.Type) -> NavigationAction<FromViewController, ToViewController, EmbeddingViewController> {
16+
@discardableResult override public func to<ToViewController>(_ viewControllerType: ToViewController.Type) -> NavigationAction<FromViewController, ToViewController, EmbeddingViewController> {
1717
configuration.destination.target = viewControllerType
1818

1919
return cast(self, to: NavigationAction<FromViewController, ToViewController, EmbeddingViewController>.self)

CoreNavigation/Core/Classes/Action/NavigationConfiguration.swift

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ public class NavigationConfiguration<FromViewController: UIViewController, ToVie
1010
self.configuration = configuration
1111
}
1212

13+
@discardableResult public func to<ToViewController>(_ viewController: ToViewController) -> NavigationConfiguration<FromViewController, ToViewController, EmbeddingViewController> {
14+
configuration.destination.target = viewController
15+
16+
return cast(self, to: NavigationConfiguration<FromViewController, ToViewController, EmbeddingViewController>.self)
17+
}
18+
19+
@discardableResult public func to<ToViewController>(_ viewControllerType: ToViewController.Type) -> NavigationConfiguration<FromViewController, ToViewController, EmbeddingViewController> {
20+
configuration.destination.target = viewControllerType
21+
22+
return cast(self, to: NavigationConfiguration<FromViewController, ToViewController, EmbeddingViewController>.self)
23+
}
24+
1325
@discardableResult public func embed<EmbeddingViewController: ViewControllerEmbedding>(in embeddableViewControllerType: EmbeddingViewController.Type) -> NavigationConfiguration<FromViewController, ToViewController, EmbeddingViewController> {
1426
configuration.embedding.embeddableViewControllerType = embeddableViewControllerType
1527

@@ -42,13 +54,9 @@ public class NavigationConfiguration<FromViewController: UIViewController, ToVie
4254
}
4355

4456
@discardableResult public func pass(parameters: [String : Any]) -> Self {
45-
if var oldValue = configuration.data.value {
46-
oldValue.merge(parameters, uniquingKeysWith: { (oldValue, newValue) -> Any in
47-
return newValue
48-
})
49-
} else {
50-
configuration.data.value = parameters
51-
}
57+
configuration.data.value.merge(parameters, uniquingKeysWith: { (oldValue, newValue) -> Any in
58+
return newValue
59+
})
5260

5361
return self
5462
}

CoreNavigation/Core/Classes/Configuration.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public struct Configuration {
5252
var value: (Lifetime, String)?
5353
}
5454
class Data {
55-
var value: [String: Any]?
55+
var value: [String: Any] = [:]
5656
}
5757
class Protection {
5858
var protectionSpace: ProtectionSpace?

CoreNavigation/Core/Classes/Navigation.swift

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,31 @@ import UIKit
33
public struct Navigation {
44
private typealias BaseConfiguration = Configuration.Base<UIViewController, UIViewController, UIViewController>
55

6-
public static func present(_ configuration: (Configuration.Present) -> Void) {
7-
let _configuration = BaseConfiguration(action: .present)
8-
9-
configuration(Configuration.Present(with: _configuration))
10-
11-
Navigator(configuration: _configuration).execute(nil)
6+
public static func present(_ configuration: @escaping (Configuration.Present) -> Void) {
7+
DispatchQueue.main.async {
8+
let _configuration = BaseConfiguration(action: .present)
9+
10+
configuration(Configuration.Present(with: _configuration))
11+
12+
Navigator(configuration: _configuration).execute(nil)
13+
}
1214
}
1315

14-
public static func push(_ configuration: (Configuration.Push) -> Void) {
15-
let _configuration = BaseConfiguration(action: .push)
16+
public static func push(_ configuration: @escaping (Configuration.Push) -> Void) {
17+
DispatchQueue.main.async {
18+
let _configuration = BaseConfiguration(action: .push)
1619

17-
configuration(Configuration.Push(with: _configuration))
20+
configuration(Configuration.Push(with: _configuration))
1821

19-
Navigator(configuration: _configuration).execute(nil)
22+
Navigator(configuration: _configuration).execute(nil)
23+
}
2024
}
2125

22-
public static func response(_ configuration: (Configuration.Response) -> Void) {
26+
public static func response(_ configuration: (Configuration.Response) -> Void) -> Response<UIViewController, UIViewController, UIViewController>? {
2327
let _configuration = BaseConfiguration(action: .response)
28+
2429
configuration(Configuration.Response(with: _configuration))
30+
31+
return Navigator(configuration: _configuration).execute(nil)
2532
}
2633
}

0 commit comments

Comments
 (0)