有什么方法可以将通用协议用作函数中的数据类型吗?
Is there any way to use the generic protocol as a data type in a function?
有什么方法可以将通用协议用作函数中的数据类型吗?
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
是一个通用参数,其 class 未在函数声明中定义,因为 T
与 ICRUDOperation
关联,因此您应该使用委托如:
func Delegate1<W: ICRUDOperation>(sqlite: W, service: W, data: W.T) {
sqlite.insert(data: data)
}
有什么方法可以将通用协议用作函数中的数据类型吗?
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
是一个通用参数,其 class 未在函数声明中定义,因为 T
与 ICRUDOperation
关联,因此您应该使用委托如:
func Delegate1<W: ICRUDOperation>(sqlite: W, service: W, data: W.T) {
sqlite.insert(data: data)
}