Swift中的多个泛型类继承

安德烈·戈尔捷夫(Andrey Gordeev)

考虑一下,我有一个模型和一个基本模型:

class BaseModel: NSObject {
    var name = ""
}

class Model: BaseModel {
    var desc = "abc"
}

我添加了与这些模型一起使用的服务:

class AbstractService<T: NSObject>: NSObject {
    var items = [T]()
}

class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}

class ModelService<T: Model>: BaseModelService<Model> {
}

现在我想从中访问items变量,ModelService并期望得到Models的数组,但是我却得到BaseModels:

错误消息:无法将类型[BaseModel]的值分配给类型[Model]的值

我有没有想过使用泛型的东西?

这是Playground的完整代码:

//: Playground - noun: a place where people can play

import UIKit

/// Models:
class BaseModel: NSObject {
    var name = ""
}

class Model: BaseModel {
    var desc = "abc"
}

/// Services:
class AbstractService<T: NSObject>: NSObject {
    var items = [T]()
}

class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}

class ModelService<T: Model>: BaseModelService<Model> {
}

/// ViewController:
class ViewController: UIViewController {

    let modelService = ModelService()
    var items = [Model]()

    override func viewDidLoad() {
        super.viewDidLoad()

        items = modelService.items // The error appears here: Cannot assign a value of type [BaseModel] to a value of type [Model]
    }

}
林太郎

在您的情况下,声明应为:

class BaseModelService<T: BaseModel>: AbstractService<T> {
}

class ModelService: BaseModelService<Model> {
}

当您这样做时:

class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}

TforAbstractServiceTforBaseModelService是两种不同的类型。前者仅限于混凝土BaseModel,而后者仅限于的子类型BaseModel,并且根本不使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

泛型抽象类继承

来自分类Dev

Swift中的泛型

来自分类Dev

C#泛型:修改派生类中隐藏的继承成员

来自分类Dev

符合Swift中Comparable的泛型类

来自分类Dev

如何在Swift中的泛型类上实现NSCoding?

来自分类Dev

Java泛型中的继承方法

来自分类Dev

在参数化的泛型类中强制继承的同时发生复杂时间错误[tuple]

来自分类Dev

泛型与类继承的混淆

来自分类Dev

Swift泛型复杂继承

来自分类Dev

有什么方法可以在超类中定义泛型方法以引用继承类的类型?

来自分类Dev

Swift继承问题泛型

来自分类Dev

从类中获取泛型参数的类型,该类是从泛型接口继承的

来自分类Dev

嵌套泛型/抽象类C#中的嵌套泛型的继承

来自分类Dev

将具有多个继承的泛型类句柄转换为基类(即接口)

来自分类Dev

泛型类继承自Dictionary with Collection

来自分类Dev

具有继承的类类型的泛型列表的类

来自分类Dev

当超类是Swift中的泛型类时,如何继承超类

来自分类Dev

继承中的C#多个泛型

来自分类Dev

java类中的多个泛型类型

来自分类Dev

继承类中的泛型和构造函数

来自分类Dev

C# 泛型,其中 T 类:(继承类)

来自分类Dev

Java 中的泛型或继承/接口?

来自分类Dev

引用类型中的多继承泛型

来自分类Dev

Swift 获取泛型类中的所有属性

来自分类Dev

Swift 泛型类、继承和协方差

来自分类Dev

在java中扩展多个类的泛型

来自分类Dev

使用泛型方法将继承的泛型类添加到字典中

来自分类Dev

泛型类中的多个约束

来自分类Dev

TypeScript 中的泛型类型继承