2016-08-02 6 views
1

の比較しますか?あなたの実装でその事実を使用することができますので、あなただけのTransformStateは、ネストされた列挙型

TransformState.ErrorStateためEquatableを実装する必要が

+0

あなたの列挙型に '=='をオーバーライドします。 [関連する値を持つスウィフト列挙型の等価性をテストする方法]の可能な複製(http://stackoverflow.com/questions/24339807/how-to-test-equality-of-swift-enums-with-associated-values) – JAL

+0

@ JAL私はその質問を見ました。私の場合、それはネストされたenumですので、私はまだ混乱していました。 – natecraft1

答えて

2

は、自由のためにそれを取得します:スウィフト3.0に、あなたができるようになりますことを

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 
    } 
} 

注意をエクステンションの本体の中にオペレータの過負荷をかける。

1

ネスト列挙型TransformState. ErrorStateが等しいため、問題はthe thread shown by JALと非常によく似ています。あなたの列挙のため

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 
1

オーバーライド==

自分==などを書くことができます。

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 
    } 
}