Skip to content

TannerJin/SRouter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

An iOS(Swift) Router to resolve references between modules and don't need registered router.

原理(Base on Exported Symbol)

Usage

/*
    Login Module
*/
@_silgen_name("Login.login")
public func LoginRouterInterface(with params: [String: Any]) -> [String: Any]? {
    guard let navi = params["navi"] as? UINavigationController else {
       return nil
    }
    
    let loginController = LoginViewController()
    if let title = params["title"] as? String {
        loginController._title = title
    }
    navi.pushViewController(loginController, animated: true)
    return nil
}

/*
    Any Others Module
*/
SRouterManager.default.routeTo("Login.login")?(navi: naviController, title: "登录🚀🚀🚀", others: "Any others params...")
/*
   Login Module
*/
public func loginActionTestDefault(_ params: [String: Any]) -> [String: Any]? {
    print("Hello, loginActionTestDefault;", params)
    return nil
}

/*
    Any Others Module
*/
let routerSymbol = "Login.loginActionTestDefault(Swift.Dictionary<Swift.String, Any>) -> Swift.Optional<Swift.Dictionary<Swift.String, Any>>"

SRouterManager.default.routeTo(routerSymbol)?(param1: "hello", param2: 1024)

// will print `Hello, loginActionTestDefault; ["param1": "hello", "param2", 1024]`
/*
    Login Module
*/
public func LoginActionTest(a: Int, b: UIViewController) {
    print("Hello, LoginActionTest; inputValue =", a, b)
}

/*
    Any Others Module
*/
let routerSymbol = "Login.LoginActionTest(a: Swift.Int, b: __C.UIViewController) -> ()"
if let action = SRouterManager.default.routeTo(routerSymbol, routerSILFunctionType: (@convention(thin) (Int, UIViewController)->()).self) {
     action(1024, UIViewController())
}

Error Hander

Not Found(404)

Registered Default Hander for 404

SRouterManager.default.registeredDefultNotFoundHandler { router in
    print("\(router) Error: 404")
}

Use Default Hander

SRouterManager.default.routeAndHandleNotFound("Login.404-Test")

Use Yourself Hander

SRouterManager.default.routeAndHandleNotFound("Login.404-Test") {
    print("Login.404-Test Router is not found")            
}

Log

// open
SRouterManager.openLog()
 
// close
SRouterManager.closeLog()