Skip to content

2.0.0

Compare
Choose a tag to compare
@devxoul devxoul released this 19 Oct 05:40
· 110 commits to master since this release

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]
    + }