[英]Compare Nested Enums
如果我有
var currentState: TransformState = .Default
enum TransformState {
case Default
case Error(ErrorState)
enum ErrorState {
case Custom
case Default
}
}
var state = TransformState.Error(.Custom)
如何檢查state == currentState
?
您只需要為TransformState
實現Equatable
TransformState.ErrorState
是免費獲得的,因此您可以在實現中使用該事實:
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
}
}
請注意,在Swift 3.0中,您將能夠將運算符重載置於擴展程序主體內。
您的問題與JAL所示的線程非常相似,因為您的嵌套枚舉為TransformState. ErrorState
TransformState. ErrorState
是相等的。
您可以編寫自己的==
例如:
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
為您的枚舉覆蓋==
。
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.