2016-03-06 85 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將無法​​正常工作。