我一直在使用协议扩展程序并想出一些我认为可能是错误的内容,或者可能是我的误解。
假设您有一些特殊的动物能力和动物协议:
Capistrano 3
所以你定义你的动物结构:
enum Ability {
case Flying
case Running
case Swimming
case Hiding
}
//All animals will conform to this
protocol Animal {
var name: String { get }
var specialAbility: Ability { get }
}
但是,每当你想要一只狗时,你需要定义一种能力:
struct Dog: Animal {
var name: String
var specialAbility: Ability
}
那么你想要let rex = Dog.init(name: "Rex", specialAbility: .Flying)
的默认实现:
specialAbility
然后Xcode崩溃了。它抱怨"与游乐场服务的沟通意外中断。"
答案 0 :(得分:0)
问题在于尝试扩展extension Animal where Self: Dog {
var specialAbility: Ability { return .Running }
}
。 Dog是一个结构,而不是协议,因此Animal where Self: Dog
将不起作用。