Я создал протокол как
protocol DataBaseManager{
associatedtype type
init()
func insert(object obj: [type])
func getObject(ofType type: type.Type)-> Array<type>
//...
}
Теперь я определил RealmManager как
class RealmManager: DataBaseManager{
var realm:Realm!
required init() {
do{
realm = try Realm()
}catch {
print(error)
}
}
func insert(object obj: [Object]) {
do {
try realm.write {
realm.add(obj)
}
} catch let error {
print("the error in creation of object is \(error)")
}
}
func getObject(ofType type: Object.Type)-> Array<Object> {
let objects = realm.objects(type)
return Array(objects)
}
//.....
}
Весь смысл в том, чтобы позже легко заменить базу данных на SqliteManager, если это необходимо. Для этого я отправляю зависимость в моем viewModel как:
struct LoginViewModel {
var dbManager:DataBaseManager //error in this line
init(dbManager: DataBaseManager) {
//.....
self.dbManager = dbManager
}
}
и называя это как
let loginViewModel = LoginViewModel(dbManager:RealmManager())
Но я получаю сообщение об ошибке, так как
Протокол DataBaseManager можно использовать только в качестве общего ограничения, поскольку он имеет требования типа Self или связанные с ним.
Поскольку swift не поддерживает внедрение протокола со связанными типами. Что можно сделать, чтобы решить эту проблему?