Есть ли какой-либо способ использовать универсальный протокол в качестве типа данных в функции?

#swift #types #interface #protocols

#swift #типы #интерфейс #протоколы

Вопрос:

Есть ли какой-либо способ использовать универсальный протокол в качестве типа данных в функции?

 public protocol ICRUDOperation {

    associatedtype T

    func insert(data:T)
    func update(data:T)
    func get(data:T) -> [T]
    func GetList(data: BaseModel) -> Array<T>
    func GetPage(data: BaseModel) -> Array<T>
    func Delete(data: T)
}
  

В приведенной ниже функции я получаю сообщение об ошибке

 func Delegate1<W: ICRUDOperation>(sqlite: W, service: W, data: T) {
    sqlite.insert(data: data)
}
  

ошибка: Не удается преобразовать значение типа ‘T’ (общий параметр generic
класс ‘Decision’) к ожидаемому типу аргумента ‘W.T’ (связанный тип
протокол ‘ICRUDOperation’)

Ответ №1:

Как указано в ошибке, T это универсальный параметр, класс которого не определен в объявлении функции, поскольку T связан с ICRUDOperation , поэтому вы должны использовать свой делегат как:

 func Delegate1<W: ICRUDOperation>(sqlite: W, service: W, data: W.T) {
    sqlite.insert(data: data)
}