Created
April 5, 2017 03:38
-
-
Save gracietti/78cb22a5b5dd759ec4dae72935e2c0cf to your computer and use it in GitHub Desktop.
Sending messages with delegates
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
// 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