#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)
}