Reputation: 2846
If I have
var currentState: TransformState = .Default
enum TransformState {
case Default
case Error(ErrorState)
enum ErrorState {
case Custom
case Default
}
}
var state = TransformState.Error(.Custom)
How can I check if state == currentState
?
Upvotes: 2
Views: 577
Reputation: 4593
You just need to implement Equatable
for TransformState
TransformState.ErrorState
gets it for free, so you can use that fact in your implementations:
extension TransformState: Equatable {}
func ==(lhs: TransformState, rhs: TransformState) -> Bool {
switch (lhs, rhs) {
case (.Default, .Default):
return true
case let (.Error(lhsErrorState), .Error(rhsErrorState)):
return lhsErrorState == rhsErrorState
default:
return false
}
}
Note that in Swift 3.0, you'll be able to put the operator overload inside the extension's body.
Upvotes: 3
Reputation: 42489
Override ==
for your enum.
func ==(lhs: TransformState, rhs: TransformState) -> Bool {
switch (lhs, rhs) {
case (.Default, .Default):
return true
case (.Error(.Custom), .Error(.Custom)):
return true
case (.Error(.Default), .Error(.Default)):
return true
default:
return false
}
}
Upvotes: 1
Reputation: 47896
Your issue is very similar to the thread shown by JAL, because your nest enum TransformState. ErrorState
is Equatable.
You can write your own ==
like:
func == (lhs: TransformState, rhs: TransformState) -> Bool {
switch (lhs, rhs) {
case (.Default, .Default):
return true
case (.Error(let state1), .Error(let state2)):
return state1 == state2
default:
return false
}
}
var currentState: TransformState = .Default
var state = TransformState.Error(.Custom)
print(state == currentState) //->false
currentState = .Error(.Custom)
print(state == currentState) //->true
Upvotes: 1