URLNavigator v2.0.0 Release Notes
Release Date: 2017-10-19 // over 6 years ago-
๐ Improvements
- โ Add
NavigatorType
protocol. Use this protocol to inject a dependency ofNavigator
. - โ Add
NavigatorDelegate
protocol. Use this protocol to decide whether to push or present or not.
Migration Guide
Accessing an instance: A singleton instance named
Navigator
is removed andURLNavigator
is renamed toNavigator
. You have to create your own instance.- Navigator.foo()+ let navigator = Navigator()+ navigator.foo()
Mapping view controllers : Use
register()
to map view controllers. It takes a view controller factory instead ofURLNavigable
so that you can inject dependency to the view controller or create a view controller from Storyboard. Also,URLNavigable
is removed.- Navigator.map("myapp://user/\<id\>", UserViewController.self)+ navigator.register("myapp://user/\<id\>") { (url: URLConvertible, values: [String: Any], context: Any?) -\> UIViewController? in+ let viewController = storyboard.instantiateViewController(withIdentifier: "foo")+ viewController.dependency = injectDependencyHere+ }
Mapping url handlers : Use
handler()
to map url open handlers. URL open handlers now can takecontext
as a third parameter.- Navigator.map("myapp://alert") { (url: URLConvertible, values: [String: Any]) -\> Bool in- return false- }+ navigator.handle("myapp://alert") { (url: URLConvertible, values: [String: Any], context: Any?) -\> Bool in+ return false+ }
Presenting with a navigation controller : A type of the parameter
wrap
frompresent()
is changed fromBool
toUINavigationController.Type?
. Passnil
if you don't want to wrap a view controller with a navigation controller and pass a class reference ofUINavigationController
or its subclass if you would like to wrap with a navigation controller.- Navigator.present("myapp://user/123", wrap: true)+ navigator.present("myapp://user/123", wrap: MyNavigationController.self)
Custom URL value converters : URL value converters are now managed with a dictionary. Just set a value with custom value converter. Note that the handler parameters are changed from the single value to the entire path components and an index.
- URLMatcher.default.addURLValueMatcherHandler(for: "foo") { (value: String) -\> Any? in- return value- }+ navigator.matcher.valueConverters["foo"] = { (pathComponents: [String], index: Int) -\> Any?+ return pathComponents[index]+ }
- โ Add