不支持使用 'Protocol' 作为符合协议 'Protocol' 的具体类型
Using 'Protocol' as a concrete type conforming to protocol 'Protocol' is not supported
我有以下 swift 代码:
protocol Animal {
var name: String { get }
}
struct Bird: Animal {
var name: String
var canEat: [Animal]
}
struct Mammal: Animal {
var name: String
}
extension Array where Element: Animal {
func mammalsEatenByBirds() -> [Mammal] {
var eatenMammals: [Mammal] = []
self.forEach { animal in
if let bird = animal as? Bird {
bird.canEat.forEach { eatenAnimal in
if let eatenMammal = eatenAnimal as? Mammal {
eatenMammals.append(eatenMammal)
} else if let eatenBird = eatenAnimal as? Bird {
let innerMammals = eatenBird.canEat.mammalsEatenByBirds()
eatenMammals.append(contentsOf: innerMammals)
}
}
}
}
return eatenMammals
}
}
编译器不让我编译抱怨:
不支持使用 'Animal' 作为符合协议 'Animal' 的具体类型 在我递归调用函数 mammalsEatenByBirds()
我看到了其他一些答案,但无法将我的问题与其中任何一个联系起来。
修复正在将 Element: Animal
替换为 Element == Animal
。
我有以下 swift 代码:
protocol Animal {
var name: String { get }
}
struct Bird: Animal {
var name: String
var canEat: [Animal]
}
struct Mammal: Animal {
var name: String
}
extension Array where Element: Animal {
func mammalsEatenByBirds() -> [Mammal] {
var eatenMammals: [Mammal] = []
self.forEach { animal in
if let bird = animal as? Bird {
bird.canEat.forEach { eatenAnimal in
if let eatenMammal = eatenAnimal as? Mammal {
eatenMammals.append(eatenMammal)
} else if let eatenBird = eatenAnimal as? Bird {
let innerMammals = eatenBird.canEat.mammalsEatenByBirds()
eatenMammals.append(contentsOf: innerMammals)
}
}
}
}
return eatenMammals
}
}
编译器不让我编译抱怨: 不支持使用 'Animal' 作为符合协议 'Animal' 的具体类型 在我递归调用函数 mammalsEatenByBirds()
我看到了其他一些答案,但无法将我的问题与其中任何一个联系起来。
修复正在将 Element: Animal
替换为 Element == Animal
。