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

Ser*_*gio 2 enums protocols ios swift

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

protocol MyProtocol {
  func myFunction()
}

enum MyEnum: MyProtocol {
  case caseOne
  case caseTwo
  case caseThree
}
Run Code Online (Sandbox Code Playgroud)

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

extension MyProtocol where Self == MyEnum {
  func myFunction() {
    // Default implementation.
  }
}
Run Code Online (Sandbox Code Playgroud)

但我想为枚举的每种情况创建一个默认实现,如下所示(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.
  }
}
Run Code Online (Sandbox Code Playgroud)

是否可以?

Ita*_*ber 5

enumcase 并不以您可能正在寻找的方式存在于类型系统中:每个 case 都enum没有自己的类型,并且不能像这样静态地进行区分。还有一个问题是,您不能为一种类型 ( MyEnum) 提供多个满足协议要求的实现,因此从这方面来看这也是不可能的;您需要编写一个带有switch内部的实现。