2016-03-06 51 views
0

我一直在玩协议扩展,并提出了一些我认为可能是一个错误,或者可能是我的一个误解。扩展协议与枚举默认实现崩溃的Xcode

说你有一些特殊的动物的能力和动物协议:

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

extension Animal where Self: Dog { 
    var specialAbility: Ability { return .Running } 
} 

但是,然后Xcode崩溃。它抱怨说:“与操场服务的沟通意外中断。”

回答

0

的问题是想扩展Animal where Self: Dog时。狗是一个结构,而不是一个协议,所以where将无法​​正常工作。