【发布时间】:2022-06-10 21:32:16
【问题描述】:
protocol AnimalFeed {
init()
}
protocol Animal {
associatedtype Feed: AnimalFeed
func eat(_ food: Feed)
}
struct Hay: AnimalFeed {}
struct Carrot: AnimalFeed {}
struct Cow: Animal {
func eat(_ food: Hay) {
print("I eat hay")
}
}
struct Rabbit: Animal {
func eat(_ food: Carrot) {
print("I eat carrot")
}
}
struct Farm {
func feed<T: Animal>(_ animal: T) {
animal.eat(T.Feed())
}
func feedAll<T: Animal>(_ animals: [T]) {
animals.forEach { feed($0)}
}
}
let farm = Farm()
farm.feed(Rabbit())
farm.feedAll([Cow(), Rabbit()])
最后一行导致错误:表达式类型不明确,没有更多上下文 我们如何解决这个问题? 我希望能够传递一个符合 Animal 协议的结构数组。
【问题讨论】:
-
您需要类型擦除。 This优秀文章详细讲解。
-
观看 WWDC 2022 的“拥抱 Swift 泛型”。Swift 5.7 将通过
any Animal提供智能解决方案
标签: swift generics swift-protocols