natecraft1
natecraft1

Reputation: 2846

Compare Nested Enums

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

Answers (3)

NiñoScript
NiñoScript

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

JAL
JAL

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

OOPer
OOPer

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

Related Questions