Есть ли способ использовать общий протокол в качестве типа данных в функции? - PullRequest
0 голосов
/ 09 апреля 2019

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

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' (универсальный параметр универсального класс «Решение») к ожидаемому типу аргумента «W.T» (связанный тип протокол 'ICRUDOperation')

1 Ответ

0 голосов
/ 09 апреля 2019

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

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