Ana 0.3.0

Ana 0.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年7月
SwiftSwift 版本3.0
SPM支持 SPM

Oscar Fuentes 维护。



Ana 0.3.0

  • oscarafuentes

Ana

目录

  • 入门指南
    • 简介
    • 要求
    • 安装
    • 使用

  • 文档
  • 版本号
  • 维护者
  • 许可证

入门指南

简介

此模块提供了为用 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
    }
}

在此场景中,IndexRouteARoute 的子类,充当通配符路由。

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()
    }

}

IndexComponentAComponent 的子类,充当所有业务逻辑和面向用户界面的代理。它通过 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
        }
    }

}

此存储库中包含一个示例,方便使用。

文档

Ana

静态函数

  • register(_ router: ARouter, url: URL) - 注册用于路径解析、重定向等的路由。
    • 参数 router:管理此应用程序的路由。
    • 参数 url:要解析的初始 URL(默认为 “/”)。

  • dispatch(_ url: URL) - 为给定的 URL 分发路由信号。
    • 参数 url:要解析的 URL。

ARouter

初始化器

  • init(_ route: ARoute, domains: [String])
    • 参数 route:基础路由。
    • 参数 domains:要处理的域名(默认为 [])。

ARoute

初始化器

  • init(_ path: String, match: Bool, subRoutes: [ARoute])
    • 参数 path:路由路径(默认为 nil)。
    • 参数 match:指定匹配方案(默认为 true)。
    • 参数 subRoutes:此路由下的可用子路由(默认为 [])。

实例函数

  • generateComponent() -> AComponent - 创建一个与该路由关联的组件对象。
    • 返回:与该路由关联的 AComponent

AComponent

实例函数

  • generateTemplate() -> UIResponder - 创建一个与该组件关联的界面对象。
    • 返回:与该组件关联的 UIResponder

生命周期钩子

  • onInit() - 初始化后函数,用于避免构造函数逻辑。
  • onDestroy() - 销毁前函数,用于清理资源。

扩展

UIViewController

  • transitionStyle() -> Int
    • 返回:在将此视图控制器集成到层次结构时使用的转换风格(AViewControllerTransitionStyle 提供预定义值)。

版本控制

此模块使用 语义版本控制。有关可用版本,请参阅 此存储库的标签

维护者

许可

此项目使用 MIT 许可协议