是否可以将具有关联类型的协议用作匹配某些约束的属性?
这是一个我正在努力的例子:
protocol Animal {
associatedtype Item
func doSomething(with item: Item)
}
class Owner<Item> {
var item: Item
// I have to be sure that Animal.Item == Item
var animal: Animal
}
答案 0 :(得分:2)
具有关联类型的协议不能用作属性的类型。您可以尝试约束this->name
的泛型类型,而不是约束animal
的类型:
Owner
您不需要class Owner<AnimalType> where AnimalType : Animal {
var item: AnimalType.Item?
var animal: AnimalType?
}
,因为您可以使用Item
。这就是相关类型的工作方式。假设您想要一个接受AnimalType.Item
的函数,您可以使用Item
代替它:
AnimalType.Item
或许这可能符合您的需求?
func someFunc(someParameter: AnimalType.Item) { ... }