UPDATE 2: 別の回避策... ONLYケースに基づいてInt
を返すvar
を作成し、その後、静的使うだけ例等価性をテストするための方法(またはインスタンスを、私は静的にきれいに見えたと思いました) 。それはあなたが(あなたが1の静的メソッドを交換したい場合を除き)演算子をオーバーロードする必要はありません、Equatable
と衝突しません、あなたも作成する必要はありません、別などvar isFoo
、var isBar
、
私はあなたがより一般的な質問をするためにこの例を使用したことを知っています(if caseを式として使用するにはどうすればよいでしょうか?)しかし、それが不可能なら、これは有効な回避策かもしれません。これは "症状" ではない "問題"
enum Something{
case Foo(Int)
case Bar(Int)
static func sameCase(a: Something, b: Something) -> Bool {
return a.caseValue == b.caseValue
}
var caseValue: Int {
switch self {
case .Foo(_):
return 0
case .Bar(_):
return 1
}
}
//if necessary
var isBar: Bool {
return Something.sameCase(self, b: Something.Bar(0))
}
}
Something.sameCase(.Bar(0), b: .Foo(0)) // false
Something.sameCase(.Bar(1), b: .Foo(2)) // false
Something.sameCase(.Foo(0), b: .Foo(0)) // true
Something.sameCase(.Bar(1), b: .Bar(2)) // true
Something.Bar(0).isBar // true
Something.Bar(5).isBar // true
Something.Foo(5).isBar // false
UPDATE 1扱う場合、私は謝罪:
[OK]を、ので、これは動作しているようです。 ==演算子をオーバーロードして値を無視し、両方の列挙型が同じ場合にのみtrueを返すと、isFooメソッド内の任意の値を渡して型を決定することができます。
私はあなたが関連付けられている値に対応するために、この機能をカスタマイズする必要がありますと仮定していますが、それは正しい方向への一歩
enum Something {
case Foo(Int)
case Bar(Int)
var isFoo: Bool {
return self == .Foo(0) // number doesn't matter here... see below
}
}
func ==(a: Something, b: Something) -> Bool {
switch (a,b) {
case (.Bar(_), .Bar(_)):
return true
case (.Foo(_), .Foo(_)):
return true
default:
return false
}
}
let oneFoo = Something.Foo(1)
let twoFoo = Something.Foo(2)
let oneBar = Something.Bar(1)
let twoBar = Something.Bar(2)
oneFoo == twoFoo // true
oneFoo == oneFoo // true
oneFoo == oneBar // false
oneFoo == twoBar // false
OLDのように思える:あなたが使用することができます
self
とcase
の名前を直接確認してください。case
キーワードを使用する必要はありません。うまくいけば、これはあなたの状況のために動作します:
enum Something{
case Foo(Int)
case Bar(Int)
var isFoo: Bool {
switch self {
case Foo:
return true
case Bar:
return false
}
}
}
あなたはスイッチに関するこれらのコメントを見つけるかもしれないし、/ else文は_expressions_は「迅速な進化フォーラム」に掲載になっている場合に便利:https://github.com/apple/swift-進化/ blob/master/common_proposed.md。だから、残念ながら答えは「いいえ」です。 – CouchDeveloper