CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 months to go.

ERouter 0.0.1

ERouter 0.0.1

Maintained by BraveShine.



ERouter 0.0.1

  • By
  • author

Router Swift 路由器

自定义一个module

class HomeModule: RouteModule {
    static let shared = HomeModule("home")
}

模块安装

HomeModule.shared.install()

模块内注册响应

public class HomeModule: RouteModule {
    
    let bin = RouterBin()
    
    static var token: String? = "12345677"
    
    public static let shared: HomeModule = HomeModule()

    init() {
        super.init("home")
        /// 注册同步响应
        register("/name") { data in
            return ResponseData<String>.success("name")
        }.disposed(by: bin)
        register("/name/info") { data in
            let vc = HomeViewController()
            vc.text = "info"
            return ResponseData<HomeViewController>.success(vc)
        }.disposed(by: bin)
        /// 注册异步响应
        registerAsync("/name/detail") { data, res in
            let vc = HomeViewController()
            vc.text = "detail"
            res?(ResponseData<UIViewController>.success(vc))
        }.disposed(by: bin)
        /// 添加拦截器
        self.add(HomeInterceptor())
    }
}

struct HomeInterceptor: RequestInterceptor {
    func interceptor(_ request: inout RTRequestData) {
        if let token = HomeModule.token {
            request.parameters["token"] = token
        }
    }

}

模块调用

/// 同步调用
let text = HomeModule.shared.request("user/name?name=abc&age=10", type: [String: Any?].self)
let res = HomeModule.shared.request("home/name/info", type: UIViewController.self)
/// 异步调用
HomeModule.shared.requestAsync("home/name/detail", type: UIViewController.self) {[weak self] res in
    res?.log()
    if let vc = res?.data {
        self?.present(vc, animated: true)
    }
}

使用路径参数

/// 注册
register("/name/:id") { data in
    return ResponseData<String>.success("name")
}.disposed(by: bin)

registerAsync("/:id") { data, res in
    res?(ResponseData.success(data))
}.disposed(by: bin)
/// 调用
HomeModule.shared.request("home/name/123456?name=abc&age=10", type: String.self)

HomeModule.shared.requestAsync("home/123456?name=abc&age=10", type: [String: Any?].self) { res in
    res?.log()
}