Ios 如何将类中的公共属性设置为泛型
例如,我有4个模型类,其中包含名为name、value和amounts的3个属性。如何创建一个接受我的模型类并相应工作的泛型类。每个类都有另一个类的对象。形成树状结构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?
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