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 of Navigator.
    • โž• 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 and URLNavigator is renamed to Navigator. 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 of URLNavigable 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 take context 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 from present() is changed from Bool to UINavigationController.Type?. Pass nil if you don't want to wrap a view controller with a navigation controller and pass a class reference of UINavigationController 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]+ }