Инициализатор с обобщенными протоколами не работает

#swift

#swift

Вопрос:

У меня есть протокол с дженериками:

 protocol DataService {
  associatedtype T

  var getData: ((T) -> Void)? { get set }
}
  

Который я пытаюсь использовать в качестве параметра в инициализаторе:

 class MyProvider {
  var service: DataService

  init(service: DataService) {
    self.service = service
  }
}
  

Тем не менее, я продолжаю получать:

 Protocol 'DataService' can only be used as a generic constraint because it has Self or associated type requirements
  

Я пробовал приведенный ниже код, но он не сработал:

 init<T: String>(service: DataService) {
  self.service = service
}
  

Ответ №1:

Вместо этого вы можете создать универсальный класс:

 class MyProvider<T> where T: DataService {
    var service: T

    init(service: T) {
        self.service = service
    }
}