有什么方法可以将通用协议用作函数中的数据类型?

时间:2019-04-09 05:45:45

标签: swift types interface protocols

有什么方法可以将泛型协议用作函数中的数据类型?

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 :(得分:0)

如错误所述,T是一个泛型参数,其类未在函数声明中定义,因为TICRUDOperation相关联,因此您应将委托用作:

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