Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. protocol Injectable: UIViewController {
  2. associatedtype Dependency
  3. init?(coder: NSCoder, dependency: Dependency)
  4. }
  5.  
  6. extension UIStoryboard {
  7. static func load<T: Injectable>(_ viewController: T.Type, with dependency: T.Dependency) -> T {
  8. let name = String(describing: T.self)
  9. let storyboard = UIStoryboard(name: name, bundle: nil)
  10. return storyboard.instantiateInitialViewController { coder in
  11. T.init(coder: coder, dependency: dependency)
  12. }!
  13. }
  14. }
  15.  
  16. class FooViewController: UIViewController, Injectable {
  17.  
  18. private let dependency: String
  19.  
  20. @IBOutlet weak var label: UILabel! {
  21. willSet {
  22. newValue.text = "dependency: \(dependency)"
  23. }
  24. }
  25.  
  26. required init?(coder: NSCoder, dependency: String) {
  27. self.dependency = dependency
  28. super.init(coder: coder)
  29. }
  30.  
  31. required init?(coder: NSCoder) {
  32. fatalError()
  33. }
  34. }
  35.  
  36. class ViewController: UIViewController {
  37.  
  38. override func viewDidLoad() {
  39. super.viewDidLoad()
  40. }
  41.  
  42. @IBAction func tapButton(_ sender: Any) {
  43. let vc = UIStoryboard.load(FooViewController.self, with: "Hello, iOS 13!") // ⭐
  44. self.navigationController?.pushViewController(vc, animated: true)
  45. }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement