MK2Router 2.4.0

MK2Router 2.4.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2019年10月
SPM支持Swift Package Manager

Yuichi Kobayashi 维护。



MK2Router 2.4.0

  • Yuichi Kobayashi

MK2Router

MK2Router 是一个用于Swift的视图控制器路由实用工具。

另请参阅:Qiita(日语) http://qiita.com/imk2o/items/8a46cfeaede7cbba4dcb

要求

  • iOS 8.0+
  • Xcode 8.0+
  • Swift 3.0

安装

CocoaPods

请在您的Podfile中添加以下行。

pod 'MK2Router', '~> 2.4.0'

运行pod install并打开您的Xcode工作空间。

使用

DestinationType 协议

DestinationType 协议表示可路由目的地视图控制器。声明 typealias Context 来指定路由所需参数的类型。

class ItemDetailViewController: UIViewController, DestinationType {
  typealias Context = Int

  ...
}

UIViewController#context 属性指的是传递的参数。

override func viewDidLoad() {
    super.viewDidLoad()

    let itemID: Int = self.context
}

使用 segue 进行路由

UIStoryboardSegue 扩展提供了在视图控制器之间传递参数的功能。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    segue.mk2.context(ifIdentifierEquals: "ShowDetail") { (destination: ItemDetailViewController) in
        guard
            let indexPath = self.tableView.indexPathForSelectedRow,
            let selectedItem = self.items?[indexPath.row]
        else {
            fatalError()
        }

        return selectedItem.ID
    }
}

手动路由

Router 类提供了一些实例方法。以下示例显示了使用 Main 工程簿的 ItemDetailNav 布局创建的 ItemDetailViewController

Router.shared.perform(
    sourceViewController,
    storyboardName: "Main",
    storyboardID: "ItemDetailNav"
) { (destination: ItemDetailViewController) -> Int in
    return itemID    // pass the seleted item ID
}

变异上下文

如果想要 DestinationType.Context 配备变异类型,请使用 enum 类型作为上下文。

class ItemDetailViewController: UIViewController, DestinationType {
    enum ContextType {
        case itemID(Int)
        case item(Item)
    }
    typealias Context = ContextType

    ...

使用 unwind segue 进行反馈

如果想要使用 unwind segue 将值反馈给源视图控制器,按以下操作。

  • 在 unwind(目标视图控制器)时存储反馈值。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    segue.mk2.feedback(ifIdentifierEquals: "Unwind") { (source: SearchOptionViewController) in
        return self.keywordTextField.text ?? ""
    }
}
  • 在源视图控制器中获取反馈值。
@IBAction func unwindFromSearchOption(_ segue: UIStoryboardSegue) {
    if let keyword = segue.mk2.feedback(from: SearchOptionViewController.self) {
        self.loadItems(keyword: keyword)
    }
}

许可证

MIT许可证。