IKRouter 1.0.4

IKRouter 1.0.4

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2015 年 10 月
SPM支持 SPM

Ian Keen 维护。



IKRouter 1.0.4

  • Ian Keen

IKRouter

它做什么?

一旦您将您的 UIViewController 实现为 Routable,您可以用它们在 url 方案路由中表示的参数进行注册。然后 IKRouter 可以为您创建一个 UIViewController 数组,以便在处理有效 URL 时显示。您所要做的就是显示它们!

IKRouter 还可以通过简单地注册一个路由并使用函数/闭包来处理它来按传统方式处理路由。这两种方法也可以同时使用。

一个示例路由是

myapp://project/:projectId/item/:itemId

注意,路由必须包含方案(myapp://),URL 参数需要以冒号(:)为前缀,并且在注册路由时不包括查询字符串,因为当匹配路由时它们是包含的。

使用 Routables

为了使用 Routables 自动创建您的 UI 栈

  1. 使任何可以与路由参数相关联的 UIViewController 符合 Routable
  2. 将这些注册到您的 IKRouter 实例。
  3. 注册使用这些参数的路由。
  4. 通过 routableHandler 闭包/函数处理 UIViewController 链。

Routable 协议

Routable 协议由一个简单的方法组成,该方法在给定一个 MatchedRoute 时返回 Routable 的一个实例。

protocol Routable {
    static func instanceForRoute(route: MatchedRoute) -> Routable?
}

MatchedRoute 实例提供了所有通过到 Routables 传递所需的信息,如匹配的参数及其值以及查询字符串。

Routable 示例

一旦您的 UIViewControllerRoutable,只需做以下操作

let navController = UINavigationController()
let router = IKRouter()
router
    .registerRoutableWithParameter(ProjectViewController.self, parameter: ":projectId")
    .registerRoutableWithParameter(ItemViewController.self, parameter: ":itemId")
    .registerRouteHandler("myapp://project/:projectId/item/:itemId")
    .registerRouteHandler("myapp://project/:projectId")
    .routableHandler = { match, viewControllers in
        navController.setViewControllers(viewControllers, animated: true)
    }

使用 Routable 时要注意的事项

  • 只要每个路由都是唯一的,并且为所有参数注册了 Routable,就可以在任何组合中注册尽可能多的路由。
    • 唯一
    • 为所有参数注册了 Routable

  • 如果路由中有一个参数没有 Routable,将使用默认处理程序(如果提供)
  • 注册路由时有一个 handler 参数。当使用 Routable 时可以省略它。

非 Routable 示例

如果您有的路由可能不适合由 Routable 提供的 自动 功能,您还可以注册具有自己的处理器的单独路由。

let router = IKRouter()
router
    .registerRouteHandler("myapp://project/:projectId/item/:itemId") { match in
        //create view controllers and show here...
        return true
    }
    .registerRouteHandler("myapp://project/:projectId/users/:userId") { match in
        //create view controllers and show here...
        return true /* return false if we didn't handle the route */
    }

注意:此处使用的是每个路由的处理程序(与上面不同)

UIViewController 展示

每个应用程序都有略微不同的 UI 层次结构/架构……因此,IKRouter 不提供 UIViewController 展示的自动处理,而是允许您自己处理。相反,我提供了一种 UINavigationController 扩展,您可以使用它以不同方式显示堆栈。

目前有一个简单的方法,可以取一个 UIViewController 堆栈;推送除最后一个以外的所有项,并以如下方式 展示 堆栈中的最后一个项:

router.routableHandler = { match, viewControllers in
    navController.setViewControllersPresentingLast(viewControllers, animatedSet: true, animatedPresent: true)
}

如果您认为有其他展示堆栈的方式,会很有用,请随时添加问题或拉取请求,两者都欢迎!

安装

或通过将 IKRouter 子文件夹中的源文件手动添加到项目中。

其余部分...

这里包含了一个应用程序,您可以用它来看到它在操作中的样子。