Swift Xcode 7 beta 5类型不能将自身称为需求

Swift Xcode 7 beta 5类型不能将自身称为需求,swift,generics,protocols,Swift,Generics,Protocols,此代码以前是合法的: protocol Flier { typealias Other : Flier func flockTogetherWith(f:Other) } struct Bird : Flier { func flockTogetherWith(f:Insect) {} } struct Insect : Flier { func flockTogetherWith(f:Insect) {} } 现在(在Xcode 7 beta 5中)它不是。这

此代码以前是合法的:

protocol Flier {
    typealias Other : Flier
    func flockTogetherWith(f:Other)
}
struct Bird : Flier {
    func flockTogetherWith(f:Insect) {}
}
struct Insect : Flier {
    func flockTogetherWith(f:Insect) {}
}

现在(在Xcode 7 beta 5中)它不是。这是怎么回事?这是虫子吗?我只是想确保传单的采用者声明
flockTogetherWith
,参数是传单的某个采用者。我一直都能做到。为什么突然做错了?

我不知道为什么这会错。但解决这个问题相当容易(尽管很烦人):声明另一个协议供Flier采用,并将其用作约束类型:

protocol Superflier {}
protocol Flier : Superflier {
    typealias Other : Superflier
    func flockTogetherWith(f:Other)
}
它使代码变得非常复杂,但至少它通过了编译器

编辑:SevenTenEleven在开发论坛上的回应:

拥有这种约束并非天生不合理,但在某些情况下会导致编译器崩溃。我们决定暂时锁定这一点。您使用第二个协议的解决方案是合理的


因此,如果令人遗憾的话,这种改变可能被认为是故意的,而我给出的解决办法是目前的方向。

我正在等待苹果开发论坛的第一个回应。有时苹果的人会解释。在Xcode 7 beta 4中,该代码也无法编译(带有相同的错误消息)。谢谢,@MartinR,我相信你是对的。我有很多代码示例,所以每次有新的beta版时,我都无法重新测试所有代码示例,而且发行说明中的任何内容都没有让我怀疑这里可能有变化,所以很可能我跳过了依赖此功能的示例。