2
case
に関連付けられた値がある場合、列挙型の等価性はどのようにテストできますか?不自然な例:あなたはif case
を使用することができますfor ...等価のための列挙型のテスト列
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
をテストすることができます知っているが、彼らは面倒ですので、実際の列挙型は、より多くの例があります)
'failed 'は他のものと同じだと思うので(通常は' error'が同じであれば変わってしまいます)、s ==のステータスで 'for'を実行できます。失敗しました(エラー: ""){...} '。 'if'では' if case'を実行できます。 'if case .failed = someStatus {...}'のようになります。 – Rob
プロセス内で関連する値を抽出しても構わない場合は、 'print(" failure:\(str) ")}'のように 'for case .failed(let str)を実行することができます。 – vacawama
これは幾分冗談ですが、うまくいきます: '大文字小文字(状態、ステータス){print(s)}'の場合(.failed、let s) – vacawama