我有一个实现协议的enum:
protocol MyProtocol {
func myFunction()
}
enum MyEnum: MyProtocol {
case caseOne
case caseTwo
case caseThree
}
该协议只有一个方法可以默认实现所有enum的情况:
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
的每个case都没有自己的类型,并且不能像这样静态地进行区分。还有一个问题是,你不能给一种类型(MyEnum
)超过一个实现,满足协议要求,所以这是不可能的,从这方面;你需要写一个单独的实现,里面有一个switch
。