【问题标题】:How to make common properties from class as generic如何使类中的通用属性成为通用属性
【发布时间】:2018-01-12 12:26:08
【问题描述】:

例如,我有 4 个模型类,其中包含名为名称、值和数量的 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)
    }
}

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

【问题讨论】:

  • 这里需要superclass,这里没有什么都没有 generic
  • listOfT: T? // T in [B, C, D] — 这不是列表,这是可选值

标签: ios swift generics


【解决方案1】:

你试图强制某些东西是通用的,而实际上并不需要它。正如@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
}

【讨论】:

  • 在我的例子中,每个类都应该包含自己的变量,这意味着不同的名称、值数量。 A 类同样包含 B 类的数组。 A、B、C、D 的行为就像年月周日
  • 在您的示例 A 类属性中,将覆盖哪个基本模型
  • 请澄清您的问题。也许你需要class GenericModel&lt;T: BaseModel &gt;init(model: T) { if( let a = model as? A) { ..} }
  • @Saranjith, each class should contain its own variables means different name — 同名的变量可以包含不同的值,And Class A contains array of class B likewise. — 这就是您输入的内容,而不是 //Its own properties 评论。
  • 是的。我做过类似的事情,请查看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多