Swift|Swift 路由组件
GTMRouter
GTMRouter
用Swift实现的视图控制器路由组件,简单易用!!!
实例
直接下载代码,里面有Demo
安装
Cocoapods
Install Cocoapods if need be.
$ gem install cocoapods
Add
GTMRouter
in your Podfile
.use_frameworks!pod 'GTMRouter'
Then, run the following command.
$ pod install
Manual Copy
GTMRouter
folder to your project. That's it.Note: Make sure that all files in
GTMRouter
included in Compile Sources in Build Phases.版本 Vesrion 1.3.4 This version requires Xcode 9.0 and Swift 4.
使用帮助 Firstly, import
GTMRouter
.import GTMRouter
界面跳转
// push方式打开
GTMRouter.push(url: "router://GTMRouterExample/ViewControllerB")
// present方式打开
GTMRouter.present(url: "router://GTMRouterExample/ViewControllerB")
url传参数
GTMRouter.push(url: "router://GTMRouterExample/ViewControllerC?id=1&name=GTMYang&ctitle=bunengzhongwen")
字典传参数
let params:[String:Any] = ["image": UIImage(named: "logo.png") as Any]
GTMRouter.push(url: "router://GTMRouterExample/ViewControllerC?id=1&name=GTMYang&ctitle=bunengzhongwen", parameter: params)
自定义Helper
///Helper协议
public protocol GRHelper {
var navigationController: UINavigationController? {get}
var topViewController: UIViewController? {get}
}
有时候因为项目的个性化默认的Helper满足不了需求,这是可以自定义Helper类实现GRHelper协议
然后通过
/// 注入自己的Helper类
GTMRouter.setHelper(yourHelper)
网页跳转
/// 需要自定义自己的webViewController的工厂类(实现WebVCFactory)
///WebVCFactory协议
public protocol WebVCFactory {
func createWebVC(with urlString: String) -> UIViewController
}/// 然后调用func setWebVCFactory(factory: WebVCFactory)方法将工厂类注入
/// 如果要支持http的url需要设置WebViewController的工厂类
///
/// - Parameters:
/// - factory: 用来生成Web容器控制器的工厂类(需要实现WebVCFactory协议)
public func setWebVCFactory(factory: WebVCFactory) {
Router.shared.webVCFactory = factory
}
参数实例变量必须用@objc修饰 因为苹果在Swift 4 中苹果修改了自动添加 @objc 的逻辑:一个继承 NSObject 的 swift 类不再默认给所有函数添加 @objc。只在实现 OC 接口和重写 OC 方法时才自动给函数添加 @objc 标识。
缺点与不足 参数不支持一些类型:Optional
因为是使用的oc的setValue(val, forKey: key)方式来设置属性值的
如果您有好的改进方式,麻烦赐教
参与开源 欢迎提交 issue 和 PR,大门永远向所有人敞开。
开源协议 【Swift|Swift 路由组件】本项目遵循 MIT 协议开源,具体请查看根目录下的 LICENSE 文件。
推荐阅读
- Swift中willSet和didSet的简述
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- 动态组件与v-once指令
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- vue组件中为何data必须是一个函数()
- (六)Component初识组件
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- vuex|vuex 基础结构
- Swift|Swift ----viewController 中addChildViewController