Home > Net >  Switching over multiple enums
Switching over multiple enums

Time:12-23

The context for this is that I have a protocol which covers a very general case of what I want to do. And then I conform two other sub-protocols to it.

protocol MasterProtocol {}

protocol ChildProtocol1: MasterProtocol {}
protocol ChildProtocol2: MasterProtocol {}

class Thing1: ChildProtocol1 {}
class Thing2: ChildProtocol1 {}

class Thing3: ChildProtocol2 {}
class Thing4: ChildProtocol2 {}

Now I have an enum setup like this

enum Protocol1Classes {
    case thing1
    case thing2
}

enum Protocol2Classes {
    case thing3
    case thing4
}

Now I have two very closely related enums where the combined cases cover all the classes that conform to the MasterProtocol and I want to switch over their combined values

func doThing(value: (Protocol1Classes || Protocol2Classes)) {
    switch value {
    case .thing1:
        // Do Master Protocol Stuff to Thing1
    case .thing2:
        // Do Master Protocol Stuff to Thing2
    case .thing3:
        // Do Master Protocol Stuff to Thing3
    case .thing4:
        // Do Master Protocol Stuff to Thing4  
    }
}

Clearly this wont work. Is there a way to get something like this? Without having to declare a third enum which just combines the cases in the two enums?

Thanks

CodePudding user response:

You can easily solve this by implementing the same function for both enums and then the compiler will know which one to use.

func doThing(value: Protocol1Classes) {
    switch value {
    case .thing1:
        print("do stuff 1")
    case .thing2:
        print("do stuff 2")
    }
}

func doThing(value: Protocol2Classes) {
    switch value {
    case .thing3:
        print("do stuff 3")
    case .thing4:
        print("do stuff 4")
    }
}

Then calling them will be simple

doThing(value: .thing1)
doThing(value: .thing2)
doThing(value: .thing3)
doThing(value: .thing4)

do stuff 1
do stuff 2
do stuff 3
do stuff 4

  • Related