Easy dependency injection for storyboard segues
Easy dependency injection for storyboard segues.
import Perform
// ...
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: NSIndexPath) {
let task = taskList[indexPath.row]
perform(.showTaskDetails) { taskVC in
taskVC.task = task
}
}
Configure your segues:
// Sources/Extensions/Segue.swift
import Perform
extension Segue {
static var showTaskDetails: Segue<TaskDetailsViewController> {
return .init(identifier: "ShowTaskDetails")
}
}
And then use perform(_:prepare:)
instead of performSegue(withIdentifier:sender:)
.
That’s it!
Perform checks the type of the destination view controller and casts it for you,
raising an error if your destination view controller is an unexpected type.
Ever written code like this?
guard let nav = segue.destinationViewController as? UINavigationController,
let content = nav.rootViewController as? MyViewController
else { return }
// ... finally! 😭
Perform takes care of this, searching the view controller hierarchy for a view
controller of the matching type!
prepareForSegue(_:sender:)
Multiple segues from one view controller? No problem, just prepare each
destination view controller right where you perform the segue. No more massive
switch statements.
For more examples, and a discussion about the motivation and design of Perform,
take a look at the introductory blog post.
Swift Version | Perform Version |
---|---|
3.x | 2.x |
2.x | 1.x |
Add the following to your Cartfile:
github "thoughtbot/Perform" ~> 2.0
Then run carthage update Perform
.
Follow the instructions in Carthage’s README for up-to-date
installation instructions.
Add the following to your Podfile:
pod "Perform", "~> 2.0"
See the CocoaPods guide for up-to-date installation
instructions.
See the CONTRIBUTING document.
Perform is Copyright © 2016 thoughtbot, inc.
It is free software, and may be redistributed
under the terms specified in the LICENSE file.
Perform is maintained and funded by thoughtbot, inc.
The names and logos for thoughtbot are trademarks of thoughtbot, inc.
We love open source software!
See our other projects
or hire us to help build your product.