Swift 路由框架 (Spider)

1,610 阅读1分钟

Swift 路由框架 (Spider github.com/SaveFree/Sp…)

思想

1.通过 子路由(模块化)管理项目中的全部路由,子路由可划分H5,RN,Native,Native可根据业务不同区分不能的子路由。主要进行一些页面跳转,可自定义实现跳转功能。目前数据交互为单向。

2.各个子路由通过注册到主路由中。最终映射关系由主路由统一管理。

3.子路由中,需要继承base类 添加自定义方法。

4.主路由映射全部子路由。通过路由对象找到子路由的方法。最终实现跳转。

//主路由是单例
static let shared = RouteManager()

//子路由 基类

typealias RouteModuleCallback = ([String: String]) -> ()

class RouteBaseModule {
    
    public func moduleName() -> String {
        return "base"
    }
    
    public func services() -> [ModuleModel]? {
        return nil
    }
    
    public func handlerUrl(args: [String: String],  callback: @escaping RouteModuleCallback) {
        callback(args)
    }
}
// 可以通过继承基类 实现自定义方法 ,也可以进行一些自定义处理,可进行跳转前的处理。

class XXRouteXXXModule: RouteBaseModule {

    override func moduleName() -> String {
        return "xxx"
    }
    
    override func services() -> [ModuleModel]? {
        var list = [ModuleModel]()
        list.append(ModuleModel(route: "xxx://xxxx", selector: #selector(gotoXXX(params:))))
        return list
    }

    @objc func gotoXXX(params: [String: String]) {
        self.handlerUrl(args: params, callback: {
            (params) in
             //
            print("XXXXXX")
        })
    }
}

// 注册
RouteManager.shared.registerModule(module: XXRouteXXXModule())

//跳转
RouteManager.shared.route(routeStr: "xxx://xxxx", extraArgs: nil)

(Spider github.com/SaveFree/Sp…)