如何为枚举实现的协议提供默认实现?
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
的实现。
我有一个实现协议的枚举:
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
的实现。