Есть ли способ использовать общий протокол в качестве типа данных в функции?
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)
}
error: Cannot convert value of type 'T' (generic parameter of generic class 'Decision') to expected argument type 'W.T' (associated type of protocol 'ICRUDOperation')
Как указано в ошибке, T
является общим параметром, класс которого не определен в объявлении функции, потому что T
связан с ICRUDOperation
, поэтому вы должны использовать свой делегат как:
func Delegate1<W: ICRUDOperation>(sqlite: W, service: W, data: W.T) {
sqlite.insert(data: data)
}