Skip to content

Commit 3798a1c

Browse files
author
wxlpp
committed
docs(All): 添加注释以及生成文档
1 parent 8c84fc3 commit 3798a1c

File tree

104 files changed

+20197
-51
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+20197
-51
lines changed

.jazzy.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module: UIRouter
2+
sdk: iphone
3+
swift_build_tool: xcodebuild
4+
podspec: UIRouter.podspec
5+
module_version: 1.0
6+
clean: true
7+
theme: theme/fullwidth

Example/shell/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import UIRouter
1212
class AppDelegate: UIResponder, UIApplicationDelegate {
1313

1414
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
15-
application.router.isNeedAutoRegister = true
15+
application.router.autoRegisterIfNeed()
1616
application.router.register(interceptors: [WebInterceptor()])
1717
application.router.registerErrorHandler(RouteErrorHandler())
1818
return true

Source/Route.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
import UIKit
99

10+
/// 路由结果回调闭包
1011
public typealias RouteCompletionHandler<T> = (Result<T, Error>) -> Void
12+
/// 路由处理闭包
1113
public typealias RouterHandler<T> = (RouterParameters, @escaping RouteCompletionHandler<T>) -> Void
1214

1315
struct Route<Output> {

Source/RouteError.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import Foundation
99

10+
11+
/// 路由错误
1012
public enum RouteError {
1113
/// 路由地址格式错误
1214
case badURL(url: String)
@@ -21,6 +23,8 @@ public enum RouteError {
2123
// MARK: - LocalizedError
2224

2325
extension RouteError: LocalizedError {
26+
27+
/// 错误信息
2428
public var errorDescription: String? {
2529
switch self {
2630
case .badURL(url: let url):
@@ -33,6 +37,8 @@ extension RouteError: LocalizedError {
3337
return "路由参数验证失败 路径[\(url)] 参数[\(name)]"
3438
}
3539
}
40+
41+
/// 错误发生原因
3642
public var failureReason: String? {
3743
switch self {
3844
case .badURL(url: let url):

Source/RouteErrorHandling.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,20 @@
77

88
import Foundation
99

10+
11+
/// 实现`RouteErrorHandling`完成路由错误的集中处理
1012
public protocol RouteErrorHandling {
13+
14+
/// 处理所有错误,已有默认实现,无需实现
15+
/// - Parameter error: 任意错误
1116
func handle(error: Error)
17+
18+
/// 处理路由错误
19+
/// - Parameter error: 一个`RouteError`实例
1220
func handleRouteError(_ error: RouteError)
21+
22+
/// 处理自定义错误
23+
/// - Parameter error: 用户自定义的错误
1324
func handleCustomError(_ error: Error)
1425
}
1526

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
//
2-
// RouteResponse.swift
2+
// RouteRequest.swift
33
// UIRouter
44
//
55
// Created by wxlpp on 2021/5/2.
66
//
77

88
import 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
})

Source/Router.swift

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,10 @@ public extension Routable {
3030
}
3131
}
3232

33+
34+
/// 一个路由器可以通过解析链接获得一个指定的`UIViewController`实例
3335
public class UIViewControllerRouter {
3436
private var isInitialized = false
35-
public var isNeedAutoRegister = false {
36-
didSet {
37-
if isNeedAutoRegister && !isInitialized {
38-
autoRegisterIfNeed()
39-
}
40-
}
41-
}
4237

4338
static let shared = UIViewControllerRouter()
4439
private let urlRouter = URLRouter<UIViewController>()
@@ -55,14 +50,32 @@ public class UIViewControllerRouter {
5550
pthread_rwlock_destroy(&self.lock)
5651
}
5752

58-
func autoRegisterIfNeed() {
59-
if isNeedAutoRegister {
53+
54+
/// 如果路由未注册,自动进行注册
55+
public func autoRegisterIfNeed() {
56+
if !isInitialized {
6057
DispatchQueue(label: "com.router.register").async {
6158
self.registerIfNeed()
6259
}
6360
}
6461
}
6562

63+
64+
/// 注册拦截器
65+
/// - Parameter interceptors: 拦截器数组
66+
public func register(interceptors: [RouteInterceptor]) {
67+
let last = self.interceptors.removeLast()
68+
self.interceptors.append(contentsOf: interceptors)
69+
self.interceptors.append(last)
70+
}
71+
72+
73+
/// 注册错误处理器
74+
/// - Parameter handler: 一个错误处理器
75+
public func registerErrorHandler(_ handler: RouteErrorHandling) {
76+
errorHandler = handler
77+
}
78+
6679
func registerIfNeed() {
6780
if isInitialized {
6881
return
@@ -128,14 +141,4 @@ public class UIViewControllerRouter {
128141
completionHandler(.failure(error))
129142
}
130143
}
131-
132-
public func register(interceptors: [RouteInterceptor]) {
133-
let last = self.interceptors.removeLast()
134-
self.interceptors.append(contentsOf: interceptors)
135-
self.interceptors.append(last)
136-
}
137-
138-
public func registerErrorHandler(_ handler: RouteErrorHandling) {
139-
errorHandler = handler
140-
}
141144
}

Source/UIKit[Router].swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,26 @@ import UIKit
99

1010
public extension UIApplication {
1111

12+
13+
/// 返回 `UIViewControllerRouter.shared`
1214
var router: UIViewControllerRouter {
1315
.shared
1416
}
15-
17+
18+
/// 通过链接进行页面跳转
19+
/// - Parameter url: 路由链接
20+
/// - Returns: 返回一个`RouteRequest`实例
1621
@inline(__always)
17-
func route(url: URLComponentsConvertible) -> RouteResponse {
18-
RouteResponse(url: url)
22+
func route(url: URLComponentsConvertible) -> RouteRequest {
23+
RouteRequest(url: url)
1924
}
2025

21-
func route(viewcontroller: UIViewController) -> RouteResponse {
22-
let router = RouteResponse(url: String(describing: viewcontroller))
26+
27+
/// 直接进行页面跳转
28+
/// - Parameter viewcontroller: 想要跳转的`UIViewController`实例
29+
/// - Returns: 返回一个`RouteRequest`实例
30+
func route(viewcontroller: UIViewController) -> RouteRequest {
31+
let router = RouteRequest(url: String(describing: viewcontroller))
2332
router.viewController = viewcontroller
2433
return router
2534
}

Source/URLComponentsConvertible.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,21 @@
77

88
import Foundation
99

10+
/// Types adopting the `URLComponentsConvertible` protocol can be used to construct `URLComponents`s, which can then be used to route.
1011
public protocol URLComponentsConvertible {
12+
/// 如果构造成功则返回一个 `URLComponents`,否则抛出异常.
13+
///
14+
/// - Returns: 构造成功的`URLComponents`
15+
/// - Throws: 一个`RouteError.badURL(url:)` 实例.
1116
func asURLComponents() throws -> URLComponents
1217
}
1318

1419
extension String: URLComponentsConvertible {
20+
21+
/// 如果构造成功则返回一个 `URLComponents`,否则抛出异常.
22+
///
23+
/// - Returns: 构造成功的`URLComponents`
24+
/// - Throws: 一个`RouteError.badURL(url:)` 实例.
1525
public func asURLComponents() throws -> URLComponents {
1626
guard let components = URLComponents(string: trimmingCharacters(in: .whitespaces)) else {
1727
throw RouteError.badURL(url: self)
@@ -21,15 +31,22 @@ extension String: URLComponentsConvertible {
2131
}
2232

2333
extension URL: URLComponentsConvertible {
34+
/// 如果构造成功则返回一个 `URLComponents`,否则抛出异常.
35+
///
36+
/// - Returns: 构造成功的`URLComponents`
37+
/// - Throws: 一个`RouteError.badURL(url:)` 实例.
2438
public func asURLComponents() throws -> URLComponents {
2539
guard let components = URLComponents(url: self, resolvingAgainstBaseURL: true) else {
26-
throw RouteError.badURL(url: self.absoluteString)
40+
throw RouteError.badURL(url: absoluteString)
2741
}
2842
return components
2943
}
3044
}
3145

3246
extension URLComponents: URLComponentsConvertible {
47+
/// 如果构造成功则返回一个 `URLComponents`,否则抛出异常.
48+
///
49+
/// - Returns: 构造成功的`URLComponents`
50+
/// - Throws: 一个`RouteError.badURL(url:)` 实例.
3351
public func asURLComponents() throws -> URLComponents { self }
3452
}
35-

Source/WebInterceptor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@
88
import SafariServices
99
import UIKit
1010

11+
12+
/// 默认的网页拦截器,可以拦截`http`协议的链接,返回一个`SFSafariViewController`
1113
open class WebInterceptor: RouteInterceptor {
1214

1315
public init() {}
16+
17+
/// 收到路由事件后由此进行拦截,可以继承后修改实现.
18+
/// - Parameters:
19+
/// - components: 一个`URLComponents`实例,由路由链接构造.
20+
/// - completionHandler: 拦截后由此进行回调.
1421
open func handle(components: URLComponents, completionHandler: @escaping RouteCompletionHandler<UIViewController?>) {
1522
if components.scheme?.hasPrefix("http") ?? false {
1623
if let url = components.url {

0 commit comments

Comments
 (0)