SegueCoordinator 0.9.1

SegueCoordinator 0.9.1

Evgeniy Safronov 维护。



  • Evgeniy Safronov

SegueCoordinator

Version License Platform

完整的 API 文档

Application Coordinator 模式的替代方案。创建独立的类来处理导航,而不是视图控制器。

从视图控制器中移除导航。

控制器不再需要互相了解。如果控制器需要在另一个控制器中显示一些数据,它调用一个闭包并将数据传递给它。SegueCoordinator 处理这个闭包,显示所需的控制器并将数据填充到其中。

将应用程序分解成部分。

您可以为不同的业务流程创建多个协调器并重用它们。SegueCoordinator 可以成为这些流程的好入口点。

移除样板代码。提高可读性。

SegueCoordinator 允许您以紧凑和一致的方式执行典型的导航任务,如 推送、过渡、模态

需求

  • iOS 9+
  • Swift 5
  • XCode 10.2+

安装

SegueCoordinator 可通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中

pod 'SegueCoordinator'

使用

1. 准备控制器

使用 Main.storyboard 创建初始的 ListViewController 和 DetailsViewController。从列表视图控制器到详情视图控制器添加一个 segue,标识符为 "ShowDetails"。

class ListViewController: UIViewController {

    var onShowDetails: ((String)->Void)?
    
    func showDetails() {
        onShowDetails?("Data")
    }
}

class DetailsViewController: UIViewController {

    var details: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        // show details text here
    }
}

重要

如果您重写了 prepareForSegue 方法,务必调用 super.prepareForSegue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
}

2. 创建协调器

import SegueCoordinator

class MainCoordinator: SegueCoordinator {
    init(rootNavigationController: UINavigationController) {
        super.init(storyboardName: "Main", rootNavigationController: rootNavigationController)
    }

    func start() {
        setInitial(type: ListViewController.self) {
            $0.onShowDetails =  { [unowned self] in self.showDetails($0) }
        }
    }

    func showDetails(_ details: String) {
        segue("ShowDetails", type: DetailsViewController.self) {
            $0.details = details
        }
    }
}

3. 配置 AppDelegate

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    private var mainCoordinator: MainCoordinator?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let rootNavigationController = UINavigationController()
        window?.rootViewController = rootNavigationController
        window?.makeKeyAndVisible()

        mainCoordinator = MainCoordinator(rootNavigationController: rootNavigationController)
        mainCoordinator?.start()
        return true
    }
}

完整的API参考

https://npu3pak.github.io/ios-lib-segue-coordinator/Classes/SegueCoordinator.html

示例

要运行示例项目,请克隆仓库,然后从示例目录中运行pod install

作者

Evgeniy Safronov,[email protected]

许可协议

SegueCoordinator遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。