加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 不支持使用“协议”作为符合协议“协议”的具体类型

发布时间:2020-12-14 04:44:28 所属栏目:百科 来源:网络整理
导读:我有以下快速代码: 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]
我有以下快速代码:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读