如何为枚举实现的协议提供默认实现?

How to give a default implementations to a protocol implemented by an enum?

我有一个实现协议的枚举:

protocol MyProtocol {
  func myFunction()
}

enum MyEnum: MyProtocol {
  case caseOne
  case caseTwo
  case caseThree
}

该协议只有一种方法可以默认实现所有枚举的情况:

extension MyProtocol where Self == MyEnum {
  func myFunction() {
    // Default implementation.
  }
}

但我想为枚举的每种情况创建一个默认实现,像这样 (PSEUDOCODE):

extension MyProtocol where Self == MyEnum & Case == caseOne {
  func myFunction() {
    // Implementation for caseOne.
  }
}

extension MyProtocol where Self == MyEnum & Case == caseTwo {
  func myFunction() {
    // Implementation for caseTwo.
  }
}

extension MyProtocol where Self == MyEnum & Case == caseThree {
  func myFunction() {
    // Implementation for caseThree.
  }
}

可以吗?

enum 案例在类型系统中没有以您可能正在寻找的方式出现:enum 的每个案例都没有自己的类型,因此无法区分像这样静态地反对。还有一个问题是,您不能为一种类型 (MyEnum) 提供不止一种满足协议要求的实现,因此从这方面来说这也是不可能的;您需要编写一个内部带有 switch 的实现。