使用枚举扩展默认实现协议会导致Xcode崩溃

时间:2016-03-06 00:51:10

标签: xcode swift enums protocols

我一直在使用协议扩展程序并想出一些我认为可能是错误的内容,或者可能是我的误解。

假设您有一些特殊的动物能力和动物协议:

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崩溃了。它抱怨"与游乐场服务的沟通意外中断。"

1 个答案:

答案 0 :(得分:0)

问题在于尝试扩展extension Animal where Self: Dog { var specialAbility: Ability { return .Running } } 。 Dog是一个结构,而不是协议,因此Animal where Self: Dog将不起作用。