具有关联类型作为属性的协议

时间:2018-05-06 09:11:32

标签: ios swift generics

是否可以将具有关联类型的协议用作匹配某些约束的属性?

这是一个我正在努力的例子:

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
}

1 个答案:

答案 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) { ... }