Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protocol Injectable: UIViewController {
- associatedtype Dependency
- init?(coder: NSCoder, dependency: Dependency)
- }
- extension UIStoryboard {
- static func load<T: Injectable>(_ viewController: T.Type, with dependency: T.Dependency) -> T {
- let name = String(describing: T.self)
- let storyboard = UIStoryboard(name: name, bundle: nil)
- return storyboard.instantiateInitialViewController { coder in
- T.init(coder: coder, dependency: dependency)
- }!
- }
- }
- class FooViewController: UIViewController, Injectable {
- private let dependency: String
- @IBOutlet weak var label: UILabel! {
- willSet {
- newValue.text = "dependency: \(dependency)"
- }
- }
- required init?(coder: NSCoder, dependency: String) {
- self.dependency = dependency
- super.init(coder: coder)
- }
- required init?(coder: NSCoder) {
- fatalError()
- }
- }
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- }
- @IBAction func tapButton(_ sender: Any) {
- let vc = UIStoryboard.load(FooViewController.self, with: "Hello, iOS 13!") // ⭐
- self.navigationController?.pushViewController(vc, animated: true)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement