Ios 如何将类中的公共属性设置为泛型

Ios 如何将类中的公共属性设置为泛型,ios,swift,generics,Ios,Swift,Generics,例如,我有4个模型类,其中包含名为name、value和amounts的3个属性。如何创建一个接受我的模型类并相应工作的泛型类。每个类都有另一个类的对象。形成树状结构 Class A { //Its own properties var name:String? var value:Int? var amounts:[Double?] var listOfB:B? } Class B { //Its own properties var name:String? var value:Int?

例如,我有4个模型类,其中包含名为name、value和amounts的3个属性。如何创建一个接受我的模型类并相应工作的泛型类。每个类都有另一个类的对象。形成树状结构

Class A  {
//Its own properties
var name:String?
var value:Int?
var amounts:[Double?]
var listOfB:B?
}

Class B {
//Its own properties
var name:String?
var value:Int?
var amounts:[Double?]
var listOfC:C?
}

Class C {
//Its own properties
var name:String?
var value:Int?
var amounts:[Double?]
var listOfD:D?
}

Class D {
//Its own properties
var name:String?
var value:Int?
var amounts:[Double?]
}
迄今为止的代码

public class BaseModel<T: BaseModel> {
    public var avg : Double?
    public var id : String!
    public var subModels :[T]

    init(model: [T]) {
    }
}

class GenericModel<T: BaseModel > { // Model for all subclasses

 init(model: T) {
    if let a = model as? ListOfYears {
        model.avg = self.avg
        model.id = self.id
        model.subModel .init(model:self.subModels)
    }
    if let a = model as? listOfMonths {
        model.avg = self.avg
        model.id = self.id
        model.subModels.init(model:self.subModels)
    }
    if let a = model as? ListOfWeeks {
        model.avg = self.avg
        model.id = self.id
        model.subModels .init(model:ListOfYears.listOfMonths)
    }
}
公共类基模型{
公共var平均值:双倍?
公共变量id:String!
公共var子模型:[T]
初始化(模型:[T]){
}
}
类GenericModel{//所有子类的模型
初始(型号:T){
如果让a=模型为?年列表{
model.avg=self.avg
model.id=self.id
model.subModel.init(模型:self.subModels)
}
如果让a=模型为?月列表{
model.avg=self.avg
model.id=self.id
model.subModels.init(model:self.subModels)
}
如果让a=模型为?周列表{
model.avg=self.avg
model.id=self.id
init(模型:ListOfYears.listOfMonths)
}
}

这里的ListOfYears、ListofMonth、ListOfWeeks是我的模型类

你试图强迫某些东西成为泛型,而实际上并不需要。正如@user28434非常正确地指出的,一个好的老式超类在这里会很好地发挥作用。下面是一个例子:

class BaseModel {
    var name:String?
    var value:Int?
    var amounts:[Double]?
}

class A: BaseModel  {
    //Its own properties
}

class B: BaseModel {
    //Its own properties
}

class C: BaseModel {
    //Its own properties
}

class D: BaseModel {
    //Its own properties
}

这里需要
superclass
,这里没有
generic
listOfT:T?//T在[B,C,D]中
-这不是一个列表,这是可选值在我的例子中,每个类都应该包含自己的变量,表示不同的名称、值量。类a也包含类B的数组。a、B、C、D的行为就像年、月、周、日。在示例中,类a的属性将覆盖哪一个基本模型请澄清您的问题。也许您需要
类GenericModel
init(model:T){if(让a=model为?a){..}
@Saranjith,
每个类都应该包含自己的变量,这意味着不同的名称
-同名变量可以包含不同的值,
,类A也包含类B的数组。
-这就是你所说的,而不是
//它自己的属性
注释。是的。我做了类似的事情,请查看我的ediT