我正在尝试编写一个泛型函数,它接受符合协议的任何类型,但该协议定义了associatedtype
,并且希望约束associatedtype
。
以下是我目前的情况:
func load<GroceriesQuery: Query>(groceries: GroceriesQuery) where GroceriesQuery.Grocery == Vegetable { }
更新:我创建了一个仅仅粘贴Playground
的示例,它模仿我项目中的确切问题和设置,只是以更简单的方式。 Playgrounds
中的错误消息也不同。
protocol Query {
associatedtype Groceries
}
class CucumberQuery: Query {
typealias Groceries = [Cucumber]
}
protocol Vegetable {
}
struct Cucumber: Vegetable {
}
func load<GroceriesQuery: Query>(groceries: GroceriesQuery) where GroceriesQuery.Groceries == [Vegetable] {
}
load(groceries: CucumberQuery())
然而,当我尝试调用此函数时,我收到错误:
无法调用&#39;加载(杂货:)&#39;使用类型&#39;(杂货:CucumberQuery)&#39;
的参数列表
答案 0 :(得分:1)
从函数声明中,看起来associatedtype
上的Query
被称为Grocery
(请参阅函数的where
子句)。但是,在您的class CucumberQuery
似乎只定义了Result
。您应该将类定义更改为:
class CucumberQuery: Query {
typealias Grocery = Cucumber
}