![](/img/trans.png)
[英]Passing data to an existing view model in MVVM-C pattern on iOS
[英]iOS: MVVM-C ViewController super class
我有 MVVM-C 架構。 每個UIViewController
都有一個ViewModel
和CoordinatorDelegate
用於在需要執行導航時通知Coordinator
。 創建 VC 的代碼會重復自己,我認為創建一個超類來統一創建 VC 的所有靜態函數會很棒。 像這樣:
import UIKit
class MVVMCViewController: UIViewController {
weak var coordinatorDelegate: CoordinatorDelegate?
var viewModel: Modelling?
static func initVC(storyboard: Storyboard,
coordinatorDelegate: CoordinatorDelegate?,
viewModel: Modelling?) -> Self {
let viewController = Self.instantiate(in: storyboard)
viewController.coordinatorDelegate = coordinatorDelegate
viewController.viewModel = viewModel
return viewController
}
}
所有CoordinatorDelegateProtocols
將繼承CoordinatorDelegate
和所有ViewModels
將被繼承Modelling
但是子類化並不順利。
有任何想法嗎?
嗨,這個模型不能正常工作。
MVMCViewController 有硬編碼協議作為變量類型,所以你應該在你的 childVC 中擁有相同的協議。
為了讓它像你希望的那樣工作 MVVMCViewController 顯示是通用的(但它可能有很多問題),比如
class MVVMCViewController<T: Modelling, U: CoordinatorDelegate>: UIViewController {
weak var coordinatorDelegate: U?
var viewModel: T?
}
或將剛剛投射的屬性添加到 ConnectViewController
class ConnectViewController: MVVMCViewController {
weak var coordinatorDelegate: CoordinatorDelegate?
var viewModel: Modelling?
var currentDelegate: ConnectViewControllerCoordinatorDelegate? {
coordinatorDelegate as? ConnectViewControllerCoordinatorDelegate
}
var currentVM: ConnectViewModel? {
viewModel as? ConnectViewModel
}
}
您的超類MVVMCViewController
定義了兩個屬性coordinatorDelegate
和viewModel
。 如果您只需要在您的子類ConnectViewController
訪問它們,只需正常訪問即可。 您不需要再次定義它。
此外,在您的父類中,您有weak var coordinatorDelegate: CoordinatorDelegate?
. 但是在您的子類 ( ConnectViewController
) 中,您使用不同的類型 ( ConnectViewControllerCoordinatorDelegate?
) 重新聲明了該屬性。 這是非法的,即使它是CoordinatorDelegate
的子類。
因此,要么
override
關鍵字在此處參考繼承如何在 Swift 中工作: https : //docs.swift.org/swift-book/LanguageGuide/Inheritance.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.