[https://github.com/flywithbug/HBRouter]
路由初始化注册管理
//方法工厂
//自定义跳转方法
public typealias handlerFactory = (_ router: HBRouterAction) -> Any?
//注册自定义返回 Controller
public typealias viewControllerFactory = (_ router:HBRouterAction) -> UIViewController?
//全局单例
public static func shared() -> HBRouter.HBRouter
///默认路由 host
public var defaultRouterHost: String { get }
/// 默认路由 scheme
public var defaultRouterScheme: String { get }
//默认导航控制器类(初始化时使用)
public var wrapNavgClass: UINavigationController.Type
@objc weak public var deleage: HBRouter.HBRouterDelegate?
@objc public func setDefault(_ scheme: HBRouter.routerScheme, host: HBRouter.routerHost)
@objc public private(set) var routerMapping: [HBRouter.routerURLPattern : HBRouter.HBRouterTarget] { get }
/// 路由表注册
/// - Parameters:
/// - mapping: 路由表映射关系
/// - bundleClass: 映射对象所在 bundleClass
public func registRouter(_ mapping: [HBRouter.routerPath : HBRouter.routerTarget], bundleClass: AnyClass? = nil)
public func registRouter(_ mapping: [HBRouter.routerPath : HBRouter.routerTarget], bundle: HBRouter.routerBundle? = nil)
public func registeRouter(_ targets: [HBRouter.HBRouterTarget])
public func openController(_ action: HBRouter.HBRouterAction) -> (viewController: UIViewController?, success: Bool)?
自定义路由方法处理(用于处理 jsbridge 和 flutter 路由相关)
/// 自行处理 openAction 操作
/// - Parameters:
/// - urlPatterns: hb://router.com/path hb://router.com hb:// hb
/// - factory: 回调方法
override public func registeHander(_ urlPatterns: [HBRouter.routerURLPattern], factory: @escaping HBRouter.handlerFactory)
override public func registerHander(_ urlPattern: HBRouter.routerURLPattern, factory: @escaping HBRouter.handlerFactory)
override public func registeViewController(_ urlPatterns: [HBRouter.routerURLPattern], factory: @escaping HBRouter.viewControllerFactory)
override public func registerViewController(_ urlPattern: HBRouter.routerURLPattern, factory: @escaping HBRouter.viewControllerFactory)
//router 权限校验及调用生命周期
//登录态判断及状态回调
func loginStatus(_ action:HBRouterAction, completion: ((Bool) -> Void)?) -> Bool
//路由权限校验
func shouldOpenRouter(_ action:HBRouterAction) -> Bool
//路由打开状态
func willOpenRouter(_ action:HBRouterAction)
func didOpenRouter(_ action:HBRouterAction)
//外链判断
func shouldOpenExternal(_ action:HBRouterAction) -> Bool
//外链打开状态
func willOpenExternal(_ action:HBRouterAction)
func openExternal(_ action:HBRouterAction, completion: ((Bool) -> Void)?)
func didOpenExternal(_ action:HBRouterAction)
//未能匹配到的路由回调
func onMatchUnhandleRouterAction(_ action:HBRouterAction)
//路由匹配成功回调
func onMatchRouterAction(_ action:HBRouterAction, any:Any?)
路由组件使用
//打开路由 Action
override public func openRouterAction(_ action: HBRouter.HBRouterAction) -> Any?
public func open(url: URL) -> Any?
public func open(url: URL, completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
public func open(url: URL, params: [String : Any]) -> Any?
public func open(url: URL, params: [String : Any], completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
public func open(_ path: HBRouter.routerPath, host: HBRouter.routerHost, scheme: HBRouter.routerScheme, params: [String : Any] = [:], completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
public func open(urlPattern: HBRouter.routerURLPattern, completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
public func open(urlPattern: HBRouter.routerURLPattern, params: [String : Any]) -> Any?
public func open(urlPattern: HBRouter.routerURLPattern, params: [String : Any], completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
public func open(action: HBRouter.HBRouterAction) -> Any?
public func open(action: HBRouter.HBRouterAction, params: [String : Any]) -> Any?
public func open(path: HBRouter.routerPath) -> Any?
public func open(path: HBRouter.routerPath, params: [String : Any] = [:]) -> Any?
public func open(path: HBRouter.routerPath, params: [String : Any] = [:], completion: ((HBRouter.HBRouterResponse) -> Void)? = nil, callBack: ((Any?) -> Void)? = nil) -> Any?
//查询栈内匹配到相关页面
override public func matchPages(_ action: HBRouter.HBRouterAction) -> [UIViewController]?
//回退到栈内匹配到的页面
override public func pop2Path(_ path: HBRouter.routerPath, params: [String : Any] = [:], completion: ((Bool) -> Void)? = nil) -> [UIViewController]?
override public func pop2Action(_ action: HBRouter.HBRouterAction, completion: ((Bool) -> Void)? = nil) -> [UIViewController]?
override public func pop2URL(_ url: URL, params: [String : Any] = [:], completion: ((Bool) -> Void)? = nil) -> [UIViewController]?
/// 关闭栈内路由匹配成功的控制器,如果只有一个根控制器,则不返回
/// - Parameter path: 路由 path
/// - Returns: 被移除的控制器
override public func closePage(path: HBRouter.routerPath) -> [UIViewController]?
/// 关闭导航栈中匹配到的路由
/// - Parameter urlPattern: hb://router.com/path
/// - Returns: 返回被关闭的控制器
override public func closePage(urlPattern: HBRouter.routerURLPattern) -> [UIViewController]?
@objc public enum HBRouterOption : Int {
case push = 0 //导航栈 push
case present // present 到新的导航栈
case wrap_nc // present 页面时是否添加导航控制器
case fullScreen // iOS13 是否强制全屏
}
//路由打开成功时返回模型对象
@objcMembers public class HBRouterResponse : NSObject {
public private(set) var code: Int { get }
public private(set) var msg: String { get }
public private(set) var data: Any? { get }
public private(set) var action: HBRouter.HBRouterAction { get }
@objc public init(_ action: HBRouter.HBRouterAction, data: Any? = nil, msg: String = "", code: Int = 0)
}
//Target 对象
@objcMembers open class HBRouterTarget : NSObject {
public var scheme: String
public var host: String
public var path: String
public var target: String
public var targetClass: AnyClass?
public var bundle: String
public var url: URL?
public func routerURLPattern() -> HBRouter.routerURLPattern
public var targetType: HBRouter.HBTargetType
/// 规则定义
/// - Parameters:
/// - scheme: hb:// & hb & https:// & http
/// - host: router.com
/// - path: /home/page/detail
/// - target: 目标类
/// - bundle: 目标类所在库的库名
/// - targetType: 目标类能力类型
public init(scheme: String, host: String, path: String, target: String, bundle: String, targetType: HBRouter.HBTargetType = .undefined)
public init(path: String, target: String, bundle: String)
public init(path: String, target: String)
}
//router 类型
@objc public enum HBTargetType : Int {
case undefined = 0
case controller = 1
case flutter = 2
case bridge = 3
}
//router item 数据源
@objc public private(set) var routeAction: HBRouter.HBRouterAction?
//路由 path
@objc public private(set) var routeURLPattern: String?
//手动设置 action
@objc public func setRouterAction(_ routeAction: HBRouter.HBRouterAction)
/// 控制器内处理 action 回调
/// - Parameter action: action 参数
/// - Returns: 判断是否可以打开页面 false 时,不能打开该页面
@objc open func handleRouterAction(_ action: HBRouter.HBRouterAction) -> Bool
@objc open class func needsLogin(_ action: HBRouter.HBRouterAction) -> Bool
/// 栈内单例是否唯一:
/// - Parameter
@objc open class func isSingleton(_ action: HBRouter.HBRouterAction) -> Bool
//是否支持侧滑返回
@objc open func canSlideBack() -> Bool
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.