Suppose that InputState
is a class having all of its subclasses:
class InputState{
class Deactivated: InputState {}
class Empty: InputState {}
class EmptyIgnoringPreviousState: Empty {}
class Committing: InputState {}
class NotEmpty: InputState {}
class Inputting: NotEmpty {}
class Marking: NotEmpty {}
class ChoosingCandidate: NotEmpty {}
class AssociatedPhrases: InputState {}
class SymbolTable: ChoosingCandidate {}
}
Now I am trying to refactor the following block:
if let newState = newState as? InputState.Deactivated {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.Empty {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.EmptyIgnoringPreviousState {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.Committing {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.Inputting {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.Marking {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.ChoosingCandidate {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.AssociatedPhrases {
handle(state: newState, previous: prevState, client: currentClient)
} else if let newState = newState as? InputState.SymbolTable {
handle(state: newState, previous: prevState, client: currentClient)
}
I tried to use switch like this:
switch newState {
case .Deactivated, .Empty, .EmptyIgnoringPreviousState, .Committing, .Inputting, .Marking, .ChoosingCandidate, .AssociatedPhrases, .SymbolTable: do {
}
}
But Xcode complaints:
I don't know what should I do in this case.