Swift 覆盖泛型 swift

标签 swift generics mvvm

我正在尝试为 MVVM Swift 实现泛型。我有两个基类,一个通用类的协议(protocol)。这里的特殊之处在于继承。我试了三个小时,但无法修复 :(。

protocol ObjectProtocol {
    var id: Int { get set }
    var name: String { get set }
}

class BaseViewModel<T: ObjectProtocol> {

    var objects: [T] = []

    init(){

    }
}

protocol ListViewControllerType {

    associatedtype T: ObjectProtocol
    associatedtype ViewModelType: BaseViewModel<T>
    var viewModel: ViewModelType! { get set }


    func showError(error: String)
}

extension ListViewControllerType  {

    func showError(error: String) {
        print(error)
    }
}

class Consult: ObjectProtocol {
    var id: Int = 1
    var name: String = "Consult"
}

class ConsultViewModel<T: Consult>: BaseViewModel<Consult> {

}

class ConsultViewController: ListViewControllerType {
    var viewModel: ConsultViewModel<Consult>!
}

但我在 var viewModel: ConsultViewModel<Consult>! 中出错

这是错误:Type 'ConsultViewController' does not conform to protocol 'ListViewControllerType'

有泛型和继承经验的人可以帮助我。 非常感谢。

最佳答案

我通常是这样的:

class BaseViewModel {
}

class TemplateViewModel<T: ObjectProtocol>: BaseViewModel {
    var objects: [T] = []
    init(){
    }
}

关于Swift 覆盖泛型 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48419502/

相关文章:

swift - Alamofire 发出 newwork 请求后如何返回值

json - 在 Swift 中,改变函数在外部不起作用

ios - 如何在 Swift 中获取 UIStoryboard 数组?

c# - 使用 LINQ 创建一个 List<T> 其中 T : someClass<U>

swift - 在 SwiftUI 中将数据从一个 ViewModel 传递到另一个 ViewModel?

由方法上下文定义的 Swift 泛型类型

Java多态指针

Java抽象类用泛型实现

wpf - ViewModel 构造函数包含 WPF 中的参数

c# - [名称]View.xaml.cs 文件中应该包含哪些内容?