2
如何在case
具有關聯值時測試枚舉相等性?一個人爲的例子:測試枚舉for for equal for for ... where子句
enum Status : Equatable {
case success
case failed(error: String)
static func == (lhs: Status, rhs: Status) -> Bool {
switch (lhs, rhs) {
case (.success, .success), (.failed, .failed):
return true
default:
return false
}
}
}
let statuses = [
Status.success,
.failed(error: "error 1"),
.failed(error: "error 2"),
.success
]
// Failed: Binary operator '==' cannot be applied to operands of type 'Status' and '_'
for s in statuses where s == .failed {
print(s)
}
(我知道我可以測試s != .success
,但實際的枚舉具有更多的情況下,所以他們是一個麻煩)
因爲你認爲任何'失敗'等於另一個(這很奇怪;如果'error'是相同的,通常它們是相同的),你可以在s ==的狀態下執行s。失敗(錯誤:「」){...}'。請注意,使用'if',你可以做'if case',例如'如果case .failed = someStatus {...}'。 – Rob
如果你不介意在過程中提取關聯的值,你可以在case {fa(let)str){print(「failure:\(str)」)}'中做。 – vacawama
這在某種程度上是開玩笑的,但它確實有效:'用於在zip(狀態,狀態){print(s)}'情況下(.failed,let s)''。 – vacawama