【问题标题】:Extending Protocols With Default Implementation with Enums crashes Xcode使用 Enums 扩展具有默认实现的协议会使 Xcode 崩溃
【发布时间】:2016-03-06 00:51:10
【问题描述】:

我一直在使用协议扩展,并想出了一些我认为可能是错误的东西,或者可能是我的误解。

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

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 崩溃了。它抱怨“与操场服务的通信意外中断。”

【问题讨论】:

    标签: xcode swift enums protocols


    【解决方案1】:

    问题在于尝试扩展 Animal where Self: Dog 时。 Dog 是一个结构,而不是一个协议,所以 where 将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多