我有以下快速代码:
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 } }
编译器不让我编译抱怨:
在递归调用函数mammalsEatenByBirds()时,不支持使用’Animal’作为符合协议’Animal’的具体类型
我已经看到了其他一些答案,但无法将我的问题与任何问题联系起来.
解决方法
Fix正在用Element == Animal替换Element:Animal.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。