# FBRouter
**Repository Path**: flywithbug/FBRouter
## Basic Information
- **Project Name**: FBRouter
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-25
- **Last Updated**: 2021-07-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FBRouter

[](https://cocoapods.org/pods/FBRouter)
[](https://github.com/swift-assembly/FBRouter/actions)
[](https://codecov.io/gh/swift-assembly/FBRouter)

安装
==============
### CocoaPods
1. 在 Podfile 中添加 `pod 'FBRouter'`。
2. 执行 `pod install` 或 `pod update`。
3. 导入 import FBRouter。
API
=============================
### regist routerhHost 注册路由组件的host, 应用内跳转路由映射
```
public func registURLMapping(urlmappings:Dictionary)
public static func registURLMapping(urlmappings:Dictionary)
```
### set scheme appScheme 注册应用的scheme ,用以区分是应用内跳转还是应用外跳转,
```
public static func setScheme(scheme: String)
public func setScheme(scheme: String)
```
### set wrapNavClass, present时如果需要自动添加导航控制器,会使用设置的基类,如果没有会使用苹果原生的导航控制器
```
public static func setWrapNavgClass(className: AnyClass)
```
### FBURLAction, 路由传递模型,可以通过这个模型传递参数,和对象
```
//init
public convenience init(url:URL)
public convenience init(urlString:String)
public convenience init(host:String)
public convenience init(httpUrl:String?)
// set params
public func setInteger(_ key:String, value:NSInteger)
public func setInt(_ key:String, value:Int) }
public func setDouble(_ key:String, value:Double)
public func setString(_ key:String, value:String)
public func setBool(_ key:String, value:Bool)
public func setAny(_ key:String, value:Any)
public func addEntriesFromDictonary(entries:Dictionary)
public func addParamsFromURLAction(urlAction:FBURLAction)
// query param
public func integer(_ key:String) -> NSInteger?
public func int(_ key:String) -> Int?
public func double(_ key:String) -> Double?
public func string(_ key:String) -> String?
public func bool(_ key:String) -> Bool?
public func anyObject(_ key:String) -> Any?
```
### UIViewController Extension, 路由跳转打开方式
```
@discardableResult
func openURLAction(_ urlAction:FBURLAction) -> UIViewController?
@discardableResult
func openHostString(host:String) -> UIViewController?
@discardableResult
func openURL(url:URL) -> UIViewController?
@discardableResult
func openURLString(urlString:String) -> UIViewController?
@discardableResult
func openHttpURLString(httpUrl:String) -> UIViewController?
```
### FBRouter Method, 路由打开方法
```
@discardableResult
public func openURL(url:URL,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(url: url), from: from)
}
@discardableResult
public func openURLString(urlString:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(urlString: urlString), from: from)
}
@discardableResult
public func openHttpURLString(httpUrl:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(httpUrl: httpUrl), from: from)
}
@discardableResult
public func openHost(host:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(host: host),from: from)
}
@discardableResult
public func openHost(host:String) -> UIViewController? {
return openURLAction(FBURLAction.init(host: host))
}
@discardableResult
public func openURL(url:URL) -> UIViewController? {
return openURLAction(FBURLAction.init(url: url))
}
@discardableResult
public func openURLString(urlString:String) -> UIViewController? {
return openURLAction(FBURLAction.init(urlString: urlString))
}
@discardableResult
public func openHttpURLString(httpUrl:String) -> UIViewController? {
return openURLAction(FBURLAction.init(httpUrl: httpUrl))
}
@discardableResult
public static func openURLAction(_ urlAction:FBURLAction) -> UIViewController? {
return FBRouter.router().openURLAction(urlAction)
}
@discardableResult
public static func openURLAction(_ urlAction:FBURLAction,from:UIViewController?) -> UIViewController? {
return FBRouter.router().openURLAction(urlAction,from: from)
}
@discardableResult
public static func openURL(url:URL,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(url: url), from: from)
}
@discardableResult
public static func openURLString(urlString:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(urlString: urlString), from: from)
}
@discardableResult
public static func openHttpURLString(httpUrl:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(httpUrl: httpUrl), from: from)
}
@discardableResult
public static func openHost(host:String,from:UIViewController) -> UIViewController? {
return openURLAction(FBURLAction.init(host: host),from: from)
}
@discardableResult
public static func openHost(host:String) -> UIViewController? {
return openURLAction(FBURLAction.init(host: host))
}
@discardableResult
public static func openURL(url:URL) -> UIViewController? {
return openURLAction(FBURLAction.init(url: url))
}
@discardableResult
public static func openURLString(urlString:String) -> UIViewController? {
return openURLAction(FBURLAction.init(urlString: urlString))
}
@discardableResult
public static func openHttpURLString(httpUrl:String) -> UIViewController? {
return openURLAction(FBURLAction.init(httpUrl: httpUrl))
}
```
### FBRouterDelegate 路由跳转生命周期回调
```
//将要打开链接,可以用来校验权限
func shouldOpenURLAction(_ urlAction:FBURLAction) -> Bool
//将要打开外部跳转链接,可以用来校验权限
func willOpenExternal(_ urlAction:FBURLAction) -> Bool
//已经打开外部跳转回调
func didOpenExternal(_ urlAction:FBURLAction,success:Bool)
//将要路由到某一个页面
func willOpenURLAction(_ urlAction:FBURLAction)
//未能处理的路由跳转
func onMatchUnhandledURLAction(_ urlAction:FBURLAction)
//正常的路由跳转
func onMatchViewController(_ controller:UIViewController,urlAction:FBURLAction)
//实现打开外部跳转处理方法
func openExternal(_ urlAction:FBURLAction, completionHandler completion: ((Bool) -> Void)?)
//登录判断方法回调
func handleLoginAction(_ urlAction:FBURLAction,controller:UIViewController) -> Bool
```
Usage
==============================
### delegate & register
```
///
class AppDelegate: UIResponder, UIApplicationDelegate,FBRouterDelegate{
.....
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//delegate
FBRouter.router().deleage = self
registerURLMappings()
}
}
//注册路由方法
func registerURLMappings() {
let urlMappings = ["home":"ListViewController",
"vc00":"ViewController",
"vc01":"ViewController01",
"vc02":"ViewController02",
"vc03":"ViewController03",
"vc04":"ViewController04",
"vc05":"ViewController05",
"demo":"ViewControllerDemo"]
FBRouter.router().registURLMapping(urlmappings: urlMappings)
FBRouter.router().wrapNavgClass = BaseNavigationController.self as UINavigationController.Type
}
//FBRouterDelegate
func shouldOpenURLAction(_ urlAction: FBURLAction) -> Bool {
return true
}
func willOpenExternal(_ urlAction: FBURLAction) -> Bool {
return true
}
func didOpenExternal(_ urlAction: FBURLAction, success: Bool) {
}
func willOpenURLAction(_ urlAction: FBURLAction) {
}
func onMatchUnhandledURLAction(_ urlAction: FBURLAction) {
}
func onMatchViewController(_ controller: UIViewController, urlAction: FBURLAction) {
}
func openExternal(_ urlAction: FBURLAction, completionHandler completion: ((Bool) -> Void)?) {
UIApplication.shared.open(urlAction.url!, options: [:], completionHandler:{
(success) in
guard let complete = urlAction.completeBlock else{
return
}
complete(success)
})
}
func handleLoginAction(_ urlAction: FBURLAction, controller: UIViewController) -> Bool {
return true
}
```
### router regist
```
let urlMappings = ["home":"ListViewController",
"vc00":"ViewController",
"vc01":"ViewController01",
"vc02":"ViewController02",
"vc03":"ViewController03",
"vc04":"ViewController04",
"vc05":"ViewController05",
"demo":"ViewControllerDemo"]
FBRouter.router().registURLMapping(urlmappings: urlMappings)
FBRouter.router().wrapNavgClass = BaseNavigationController.self as UINavigationController.Type
```
### push
```
//use FBURLAction transform data
let urlAction = FBURLAction.init(host: "vc01?a=b")
urlAction.completeBlock = {
(succes) in
print("succes:",urlAction.url!)
}
urlAction.isSingleton = true
urlAction.setBool("Bool", value: true)
urlAction.setString("String", value: "String")
urlAction.setDouble("Double", value: 2.0202)
urlAction.setInteger("Integer", value: 101)
let person:Person = Person.init()
person.age = 18
person.name = "nini"
urlAction.setAny("person", value: person)
FBRouter.router().openURLAction(urlAction,from: self)
-----------------
//use UIViewController Extension
let urlAction = FBURLAction.init(host: "vc02?a=b")
urlAction.completeBlock = {
(succes) in
print("succes:",urlAction.url!)
}
openURLAction(urlAction)
```
系统要求
==============
swift 5.0
该项目最低支持 `iOS 10.0` 和 `Xcode 11.0`。
许可证
==============
FBRouter 使用 MIT 许可证,详情见 LICENSE 文件。