Skip to content

Instantly share code, notes, and snippets.

@gracietti
Created April 5, 2017 03:38
Show Gist options
  • Save gracietti/78cb22a5b5dd759ec4dae72935e2c0cf to your computer and use it in GitHub Desktop.
Save gracietti/78cb22a5b5dd759ec4dae72935e2c0cf to your computer and use it in GitHub Desktop.
Sending messages with delegates
// 1. Declare which messages can be sent to the delegate
// File ProductScreenDelegate.swift
protocol ProductScreenDelegate {
//Add arguments if you need to send some information
func onProductScreenDismissed()
func onProductSelected(_ product: Product?)
}
// 2. Call the delegate when you need to send him a message
// File ProductPresenter.swift
class ProductPresenter {
// MARK: Properties
weak var view: ProductView?
var router: ProductWireframe?
var interactor: ProductUseCase?
var delegate: ProductScreenDelegate?
}
extension ProductPresenter: ProductPresentation {
//View told Presenter that view disappeared
func onViewDidDisappear() {
//Presenter told its delegate that the screen was dismissed
delegate?.onProductScreenDismissed()
}
}
// 3. Implement the delegate protocol to do something when you receive the message
// File ScannerPresenter.swift
class ScannerPresenter {
...
}
extension ScannerPresenter: ProductScreenDelegate {
//Presenter receives the message from the sender
func onProductScreenDismissed() {
//Presenter tell view what to do once product screen was dismissed
view?.startScanning()
}
...
}
// 4. Link the delegate from the Product presenter in order to proper initialize it
// File ScannerRouter.swift
class ProductRouter {
static func setupModule(delegate: ProductScreenDelegate?) -> ProductViewController {
...
let presenter = ScannerPresenter()
presenter.view = view
presenter.interactor = interactor
presenter.router = router
presenter.delegate = delegate // Add this line to link the delegate
...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment