関連付けられた値にかかわらず列挙ケースをテストするのはどういうことですか?関連する値にかかわらずスウィフト列挙型を比較してください
enum Abc {
case A(a:Int)
case B(b:Int)
}
let a = Abc.A(a:1)
a == Abc.A // <= Not possible
関連付けられた値にかかわらず列挙ケースをテストするのはどういうことですか?関連する値にかかわらずスウィフト列挙型を比較してください
enum Abc {
case A(a:Int)
case B(b:Int)
}
let a = Abc.A(a:1)
a == Abc.A // <= Not possible
確かに、あなたはswitch
でこれを行うことができます使用することができます。
switch a {
case .A:
print("it's A")
default:
print("it's not A")
}
それともif
文でパターンマッチングを使用します。
if case .A = a {
print("it's A")
} else {
print("it's not A")
}
あなたはケースに一致した後にまだ関連付けられている値に興味があるなら、あなたはそうのようにそれを抽出することができます。あなたもcase let .A(value)
としてこれを書くことができます
switch a {
case .A(let value):
...
}
if case .A(let value) = a {
...
}
注@overactor's comment below - それは主に個人的な好みの問題です。
あなたはif case
enum ABC {
case A(a: Int)
case B(b: Int)
}
let a = ABC.A(a: 1)
if case .A = a {
...
}
もし 'a'がオプションの' ABC? 'である場合にも 'if case'のサポートがあります –
@MatthieuRieglerもちろん、オプションの場合と一致するパターンの後ろに疑問符を追加するだけです。値)? = a'または 'case_A? = a' – Hamish
あなたは非常に徹底的な答えをしているので、letをケースの直後に置くこともできるし、特定の値を含むenumとマッチさせることもできます。つまり、 'if case .A(a:1)' – overactor