| 测试已测试 | ✗ |
| 语言语言 | 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 许可协议