2016-07-18 10 views

Antwort

4

In diesem Fall mein Workflow ist:

  1. Normalerweise ist die Benutzeroberfläche (view) im Modul A ein Ereignis startet, die das Modul B. löst
  2. Das Ereignis der presenter in Modul A erreicht Die presenter weiß, dass es Modul ändern muss und benachrichtigt wireframe wer weiß, wie man die Änderung vornimmt.
  3. Die wireframe in Modul A In diesem Aufruf an wireframe in Modul B benachrichtigt sendet alle benötigten Daten
  4. Die wireframe in Modul B seine normale Ausführung fortgesetzt wird, die Informationen an die

    presenter

Transferieren wireframe Ein in-Modul muss wissen wireframe B

1

Does wireframe Haben Sie einen Bezug zum Presenter? This version of VIPER which i use

Der Router über ein anderes Modul kennt und sagt Ansicht es zu öffnen. Baugruppe kombiniert alle Teile des Moduls.

2

Verwenden Delegierten Daten zwischen VIPER Module senden:

// 1. Declare which messages can be sent to the delegate 
 

 
// 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 
 

 
// ProductPresenter.swift 
 
class ProductPresenter { 
 

 
    // MARK: Properties 
 
    weak var view: ProductView? 
 
    var router: ProductWireframe? 
 
    var interactor: ProductUseCase? 
 
    var delegate: ProductScreenDelegate? 
 
} 
 

 
extension ProductPresenter: ProductPresentation { 
 

 
    //View tells Presenter that view disappeared 
 
    func onViewDidDisappear() { 
 

 
     //Presenter tells its delegate that the screen was dismissed 
 
     delegate?.onProductScreenDismissed() 
 
    } 
 
} 
 

 
// 3. Implement the delegate protocol to do something when you receive the message 
 

 
// ScannerPresenter.swift 
 
class ScannerPresenter: ProductScreenDelegate { 
 

 
    //Presenter receives the message from the sender 
 
    func onProductScreenDismissed() { 
 

 
     //Presenter tells 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 
 
     ... 
 
     } 
 
}

Weitere Tipps, lesen Sie in diesem Beitrag https://www.ckl.io/blog/best-practices-viper-architecture/

Verwandte Themen