我正在尝试使用MVVM向iOS应用添加一些基类,以使其更容易并强制建立通用的类关系。
可悲的是,我遇到了以下问题:
error: MyPlayground.playground:27:7: error: type 'ListView' does not
conform to protocol 'MVVMView'
class ListView: MVVMView {
我不确定为什么会发生这种情况,并且破坏了我“强制”代码进入该体系结构的想法。有什么明显的我想念的东西吗?我是否有解决方法来解决此问题并保留“强制”体系结构?
注意:我正在使用Swift 5。
/**
Base classes for MVVM
*/
protocol MVVMViewModel {
}
protocol MVVMView {
associatedtype ViewModel: MVVMViewModel
var viewModel: ViewModel { get }
}
/**
Simple viewmodel, only used by protocol so it can be replaced when testing
*/
protocol ListViewModelProtocol: MVVMViewModel {
}
class ListViewModel: ListViewModelProtocol {
}
/*
Simple view
*/
class ListView: MVVMView {
typealias ViewModel = ListViewModelProtocol
var viewModel: ListViewModelProtocol
init(viewModel: ListViewModelProtocol) {
self.viewModel = viewModel
}
}
答案 0 :(得分:1)
这是一个棘手的情况。 解决方法是更换
associatedtype ViewModel: MVVMViewModel
与
associatedtype ViewModel = MVVMViewModel
为什么?
您将MVVMView描述为具有viewModel属性的类型,其类型符合MVVMViewModel。您可以尝试创建这样的类
AnyView类:MVVMView { typealias ViewModel = MVVMViewModel var viewModel:MVVMViewModel
init(viewModel: MVVMViewModel) {
self.viewModel = viewModel
}
}
您将收到错误消息,说MVVMViewModel不符合MVVMViewModel 因此,MVVMViewModel不符合任何快速协议
您可以找到更详细的解释,在这里我找到了一个 Protocol doesn't conform to itself?