Skip to content

Instantly share code, notes, and snippets.

@ronanrodrigo
Last active September 10, 2019 06:45
Show Gist options
  • Save ronanrodrigo/a86c231717ea8b35ad3b1675c05790b6 to your computer and use it in GitHub Desktop.
Save ronanrodrigo/a86c231717ea8b35ad3b1675c05790b6 to your computer and use it in GitHub Desktop.
Uncoupled ViewControllers using Storyboard and UIStoryboardSegue
protocol FoodDetailViewControllable {
func bind(viewModel: FoodViewModel)
}
class FoodDetailViewController: UIViewController, FoodDetailViewControllable {
func bind(viewModel: FoodViewModel) {
title = viewModel.name
}
}
class ListFoodTableViewController: UITableViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.prepareFoodDetail(tableView.indexPathForSelectedRow) { selectedItem in
let group = groupedFoodViewModels[selectedItem.section]
return group.foods[selectedItem.row]
}
}
}
import UIKit
extension UIStoryboardSegue {
func prepareFoodDetail(_ indexPath: IndexPath?, fn: (IndexPath) -> FoodViewModel?) {
guard identifier == "OpenFoodDetail",
let viewController = destination as? FoodDetailViewControllable,
let indexPath = indexPath,
let viewModel = fn(indexPath) else { return }
viewController.bind(viewModel: viewModel)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment