簡體   English   中英

在 iOS 上以 MVVM-C 模式將數據傳遞到現有視圖 model

[英]Passing data to an existing view model in MVVM-C pattern on iOS

我正在開發一個使用CoordinatorMVVM模式的應用程序。

協調器協議如下所示:

protocol Coordinator: class {
    func start()
    func start(with deeplink: DeeplinkOption?)
}

start方法具有啟動當前協調器流的邏輯,例如創建相應的初始視圖 controller、視圖 model 等。

我嘗試通過start(with deeplink: DeeplinkOption?)方法向Coordinator協議添加深度鏈接處理。 問題是我需要將深層鏈接數據傳遞給特定協調器中已經存在的視圖 model,並且該協調器不持有對目標視圖 model 的引用。 例如想象以下堆棧:

  • 應用協調器

  • 聊天協調員

    • 聊天畫面
    • 用戶詳細信息屏幕

用戶當前在用戶詳細信息屏幕上,我需要將深層鏈接操作傳遞給聊天屏幕視圖 model。 也沒有理由從頭開始重新創建聊天屏幕,因為它是在start方法中完成的,因為聊天屏幕已經在導航堆棧中。

是否有針對此問題(以及整體協調器模式)的簡潔解決方案,而不存儲對相應視圖 model 的引用?

除了通過協調器將數據傳遞到視圖 model 之外,您還可以在要傳遞數據的相應視圖 model 中添加觀察者 觀察者將監聽數據,一旦你從任何地方調用觀察者,數據就會被傳遞。

總的來說,通過觀察者模式可以實現這一點。

您需要為此添加觀察者。無需在視圖 model 中傳遞數據。

從任何地方調用觀察者是 MVVM 傳遞數據的最佳模式

觀察者模式可用於在這些組件之間傳遞數據。 可以在 此處找到一個示例(在稍微不同的上下文中)。

它涉及向數據源注冊觀察者,並在數據源更改時通知這些觀察者。 在 Swift 中,您可以使用didSet {... }執行此操作,調用觀察者的方法以通知他們數據更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM