Last active
February 26, 2018 10:21
-
-
Save TomaszPietrowski/57e9fae3487d4c5f913b067022c4c50d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol ExampleConnectorFactory { | |
func buildExampleConnector(context: ExampleContext) -> ExampleConnecting | |
} | |
extension DependenciesFactory: ExampleConnectorFactory { | |
func buildExampleConnector(context: ExampleContext) -> ExampleConnecting { | |
let dependencies = ExampleConnector.Dependencies(factory: self, context: context) | |
return ExampleConnector(dependencies: dependencies) | |
} | |
} | |
protocol ExampleConnecting: Connecting { | |
} | |
struct ExampleContext { | |
let navigationController: UINavigationController? | |
} | |
class ExampleConnector: ExampleConnecting { | |
struct Dependencies { | |
let factory: ExamplePresenterFactory | |
let context: ExampleContext | |
} | |
private let factory: ExamplePresenterFactory | |
private weak var navigationController: UINavigationController! | |
init(dependencies: Dependencies) { | |
factory = dependencies.factory | |
navigationController = dependencies.context.navigationController | |
} | |
func connect() { | |
let presenter = factory.buildExamplePresenter() | |
let viewControllerDependencies = ExampleViewController.Dependencies(presenter: presenter, connector: self) | |
let viewController = ExampleViewController(dependencies: viewControllerDependencies) | |
navigationController.pushViewControllerAnimated(viewController) | |
} | |
} | |
protocol ExamplePresenterFactory { | |
func buildExamplePresenter() -> ExamplePresenting | |
} | |
extension DependenciesFactory: ExamplePresenterFactory { | |
func buildExamplePresenter() -> ExamplePresenting { | |
return ExamplePresenter() | |
} | |
} | |
protocol ExamplePresenting: class { | |
weak var view: ExampleView? { get set } | |
func viewIsReady() | |
} | |
class ExamplePresenter: ExamplePresenting { | |
weak var view: ExampleView? | |
func viewIsReady() { | |
} | |
} | |
protocol ExampleView: class { | |
} | |
class ExampleViewController: UIViewController, ExampleView { | |
struct Dependencies { | |
let presenter: ExamplePresenting | |
let connector: ExampleConnecting | |
} | |
private let dependencies: Dependencies | |
init(dependencies: Dependencies) { | |
self.dependencies = dependencies | |
super.init(nibName: nil, bundle: nil) | |
self.dependencies.presenter.view = self | |
} | |
required init?(coder aDecoder: NSCoder) { | |
fatalError("init(coder:) has not been implemented") | |
} | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
dependencies.presenter.viewIsReady() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment