11//
2- // RouteResponse .swift
2+ // RouteRequest .swift
33// UIRouter
44//
55// Created by wxlpp on 2021/5/2.
66//
77
88import UIKit
99
10- public final class RouteResponse {
10+ /// 路由请求包装,由此可以进行简便的页面跳转操作.
11+ public final class RouteRequest {
1112 var viewController : UIViewController ?
1213
1314 private let url : URLComponentsConvertible
@@ -16,22 +17,6 @@ public final class RouteResponse {
1617 self . url = url
1718 }
1819
19- func asyncGetViewController( _ completionHandler: @escaping RouteCompletionHandler < UIViewController > ) {
20- if let vc = viewController {
21- completionHandler ( . success( vc) )
22- return
23- }
24- UIViewControllerRouter . shared. route ( url: url) { result in
25- switch result {
26- case . success( let vc) :
27- self . viewController = vc
28- case . failure( let error) :
29- UIViewControllerRouter . shared. errorHandler? . handle ( error: error)
30- }
31- completionHandler ( result)
32- }
33- }
34-
3520 private func getVisibleViewController( ) -> UIViewController ? {
3621 let keyWindow : UIWindow ?
3722 if #available( iOS 13 . 0 . 0 , * ) {
@@ -47,9 +32,33 @@ public final class RouteResponse {
4732 return keyWindow? . rootViewController? . visibleViewController ( )
4833 }
4934
35+
36+ /// 异步获取路由结果页面
37+ /// - Parameter completionHandler: 异步回调
38+ public func asyncGetViewController( _ completionHandler: @escaping RouteCompletionHandler < UIViewController > ) {
39+ if let vc = viewController {
40+ completionHandler ( . success( vc) )
41+ return
42+ }
43+ UIViewControllerRouter . shared. route ( url: url) { result in
44+ switch result {
45+ case . success( let vc) :
46+ self . viewController = vc
47+ case . failure( let error) :
48+ UIViewControllerRouter . shared. errorHandler? . handle ( error: error)
49+ }
50+ completionHandler ( result)
51+ }
52+ }
53+
54+ /// 进行页面跳转
55+ /// - Parameters:
56+ /// - root: 使用这个`UIViewController`的`UINavigationController`进行页面跳转
57+ /// - animated: 是否开启动画
58+ /// - completionHandler: 异步回调结果
5059 public func push( by root: UIViewController ? = nil , animated: Bool = true , completionHandler: RouteCompletionHandler < UIViewController > ? = nil ) {
51- if let vc = self . viewController {
52- let root = root ?? self . getVisibleViewController ( )
60+ if let vc = viewController {
61+ let root = root ?? getVisibleViewController ( )
5362 root? . navigationController? . pushViewController ( vc, animated: animated)
5463 completionHandler ? ( . success( vc) )
5564 return
@@ -66,9 +75,14 @@ public final class RouteResponse {
6675 }
6776 }
6877
78+ /// 弹出页面
79+ /// - Parameters:
80+ /// - root: 使用这个`UIViewController`进行弹出
81+ /// - animated: 是否开启动画
82+ /// - completionHandler: 异步回调结果
6983 public func present( by root: UIViewController ? = nil , animated: Bool = true , completionHandler: RouteCompletionHandler < UIViewController > ? = nil ) {
70- if let vc = self . viewController {
71- let root = root ?? self . getVisibleViewController ( )
84+ if let vc = viewController {
85+ let root = root ?? getVisibleViewController ( )
7286 root? . present ( vc, animated: animated, completion: {
7387 completionHandler ? ( . success( vc) )
7488 } )
@@ -87,9 +101,15 @@ public final class RouteResponse {
87101 }
88102 }
89103
104+ /// 将页面包裹在`UINavigationController`中后弹出
105+ /// - Parameters:
106+ /// - type: `UINavigationController`的类型
107+ /// - root: 使用这个`UIViewController`进行弹出
108+ /// - animated: 是否开启动画
109+ /// - completionHandler: 完成后异步回调
90110 public func presentWithNavigationController< N: UINavigationController > ( _ type: N . Type , by root: UIViewController ? = nil , animated: Bool = true , completionHandler: RouteCompletionHandler < UIViewController > ? = nil ) {
91- if let vc = self . viewController {
92- let root = root ?? self . getVisibleViewController ( )
111+ if let vc = viewController {
112+ let root = root ?? getVisibleViewController ( )
93113 root? . present ( type. init ( rootViewController: vc) , animated: animated, completion: {
94114 completionHandler ? ( . success( vc) )
95115 } )
0 commit comments