Вам не нужно использовать 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)