[英]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.