Nom*_*sta 5 generics ios swift
是否可以使用具有关联类型的协议作为属性来匹配某些约束?
这是我正在努力解决的一个例子:
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
}
Run Code Online (Sandbox Code Playgroud)
具有关联类型的协议不能用作属性的类型。animal您可以尝试约束 的泛型类型,而不是约束的类型Owner:
class Owner<AnimalType> where AnimalType : Animal {
var item: AnimalType.Item?
var animal: AnimalType?
}
Run Code Online (Sandbox Code Playgroud)
您不需要,Item因为您可以仅用AnimalType.Item于此目的。这就是关联类型的工作方式。假设您想要一个接受 的函数Item,您可以使用它AnimalType.Item来代替:
func someFunc(someParameter: AnimalType.Item) { ... }
Run Code Online (Sandbox Code Playgroud)
或者这可能符合您的需求?
class Owner<AnimalType, ItemType> where AnimalType : Animal, AnimalType.Item == ItemType {
var item: ItemType?
var animal: AnimalType?
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |