我有3个领域模型类,例如ModelA
,ModelB
,ModelC
。所有这三个模型均具有参数名称fav
。
在我的方法中,我想获取模型对象(可以是以上三种类型中的任何一种),并根据fav
响应更新API
参数。
enum ModelType {
case ModelA
case ModelB
case ModelC
}
func update(type: ModelType, id: Int) {
let realm = try Realm()
if let model = realm?.object(ofType: Object.self, forPrimaryKey: id) {
do {
try realm?.write {
let favourite = FavModel()
model.favourite = favourite
realm?.add(model, update: true)
}
} catch {}
return model
}
return nil
}
我有一个枚举可以告诉我它是哪种模型对象,但不确定在获取领域对象realm?.object(ofType: Object.self, for the primary key: id)
时如何指定类名。
Object.self应该是ModelA.self
,ModelB.self
或ModelC.self
。
答案 0 :(得分:1)
您无需使用ModelType
将类名存储在enum
中。相反,您可以使用generics
,这将使您的代码更短,更简单。
我认为这三个类具有相同的参数,因为它们符合某种协议,或者它们是从具有该参数的某些超类继承的。如果它是超类,那么可以说它的名称为SuperModel
。在这种情况下,您的方法应该像这样
func update<StoredType: SuperModel>(type: StoredType.Type, id: Int) {
let realm = try? Realm()
if let model = realm?.object(ofType: type, forPrimaryKey: id) {
// handle your model
}
return nil
}
如果您的模型类符合某种协议(假设它的命名为ModelProtocol
),则您的方法应如下所示。
func update<StoredType: Object & ModelProtocol>(type: StoredType.Type, id: Int) {
let realm = try? Realm()
if let model = realm?.object(ofType: type, forPrimaryKey: id) {
// handle your model
}
return nil
}
您只需调用此方法,即可将模型类型作为参数传递
update(type: ModelA.self, id: 1)