Skip to content

Instantly share code, notes, and snippets.

@TomaszPietrowski
Last active February 26, 2018 10:21
Show Gist options
  • Save TomaszPietrowski/57e9fae3487d4c5f913b067022c4c50d to your computer and use it in GitHub Desktop.
Save TomaszPietrowski/57e9fae3487d4c5f913b067022c4c50d to your computer and use it in GitHub Desktop.
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