Swift'无法使用#39;

时间:2018-05-17 18:16:20

标签: swift generics

我正在尝试编写一个泛型函数,它接受符合协议的任何类型,但该协议定义了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;

的参数列表

1 个答案:

答案 0 :(得分:1)

从函数声明中,看起来associatedtype上的Query被称为Grocery(请参阅函数的where子句)。但是,在您的class CucumberQuery似乎只定义了Result。您应该将类​​定义更改为:

class CucumberQuery: Query {
    typealias Grocery = Cucumber
}