测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年7月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Oscar Fuentes 维护。
此模块提供了为用 Swift 编写的面向路径的 iOS 应用程序部署的路由解决方案。它遵循 Clean VIPER 架构,以便简化应用程序开发。
需要 iOS 10.0 或更高版本才能集成此模块。
CocoaPods
pod 'Ana', :git => 'https://github.com/oscarafuentes/Ana.git'
作为子项目集成
将 .xcodeproj 文件拖放到工作区。
您必须使用给定的 ARoute
注册一个 ARouter
实例来配置您的应用程序。
import UIKit
import Ana
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let router = ARouter(IndexRoute())
Ana.register(router)
return true
}
}
在此场景中,IndexRoute
是 ARoute
的子类,充当通配符路由。
import Foundation
import Ana
public class IndexRoute: ARoute {
public init() {
super.init(
nil,
match: false,
subRoutes: [
AboutRoute(),
PrivacyPolicyRoute(),
TermsOfUseRoute()
])
}
public override func generateComponent() -> AComponent {
return IndexComponent()
}
}
IndexComponent
是 AComponent
的子类,充当所有业务逻辑和面向用户界面的代理。它通过 generateTemplate
函数为基于运行时的界面提供模板 (UIResponder)。
import Foundation
import Ana
public class IndexComponent: AComponent {
public override func generateTemplate() -> UIResponder {
return IndexTemplate()
}
public func onRouteAbout() {
Ana.dispatch(URL(string: "/about")!)
}
public func onRoutePrivacyPolicy() {
Ana.dispatch(URL(string: "/privacy-policy")!)
}
public func onRouteTermsOfUse() {
Ana.dispatch(URL(string: "/terms-of-use")!)
}
}
模板的强大之处在于能够将逻辑委派给相应的组件,而这些组件可以无缝过渡到不同的路由,而不会损害性能或内存使用。
import Foundation
import UIKit
public class IndexTemplate: UIViewController {
@IBOutlet weak var aboutButton: UIButton!
@IBOutlet weak var privacyPolicyButton: UIButton!
@IBOutlet weak var termsOfUseButton: UIButton!
@IBAction func onTapPublic(_ sender: UIButton) {
guard let responder = self.component as? IndexComponent else {
return
}
switch sender {
case self.aboutButton:
responder.onRouteAbout()
break
case self.privacyPolicyButton:
responder.onRoutePrivacyPolicy()
break
case self.termsOfUseButton:
responder.onRouteTermsOfUse()
break
default:
break
}
}
}
此存储库中包含一个示例,方便使用。
register(_ router: ARouter, url: URL)
- 注册用于路径解析、重定向等的路由。router
:管理此应用程序的路由。url
:要解析的初始 URL(默认为 “/”)。dispatch(_ url: URL)
- 为给定的 URL 分发路由信号。url
:要解析的 URL。init(_ route: ARoute, domains: [String])
route
:基础路由。domains
:要处理的域名(默认为 [])。init(_ path: String, match: Bool, subRoutes: [ARoute])
path
:路由路径(默认为 nil)。match
:指定匹配方案(默认为 true)。subRoutes
:此路由下的可用子路由(默认为 [])。generateComponent() -> AComponent
- 创建一个与该路由关联的组件对象。AComponent
。generateTemplate() -> UIResponder
- 创建一个与该组件关联的界面对象。UIResponder
。onInit()
- 初始化后函数,用于避免构造函数逻辑。onDestroy()
- 销毁前函数,用于清理资源。transitionStyle() -> Int
AViewControllerTransitionStyle
提供预定义值)。此模块使用 语义版本控制。有关可用版本,请参阅 此存储库的标签。
此项目使用 MIT 许可协议