0
Swiftとパターンマッチで同時に初期値(今キャスト)を抽出することは可能ですか?例えばスイフトスイッチの値を抽出
私はこれらの列挙型があった場合、:
enum Inner {
case a(Int)
case b(Int)
}
enum Outer {
case one
case two(Inner)
}
を、私はOuter.two(Inner.a(1))
に一致するように望んでいたと同時に
let value: Any // Could be anything :|
switch value {
case let a as Outer.two(Inner.a(1)):
// Do something which needs `a`
default"
// Do some other things
}
をものに、変数のキャストを持っている、それは」doesnのas
は型にキャストするだけなので、作業しません。
また、私は動作しません
case Outer.two(let a) where a == Inner.a(1):
case let Outer.two(.a(1)) = a: // i.e. the syntax in "guard case let ..."
を試してみました。 (NBは、最初は動作しますが、==
を実装することはうるさく、私のためのオプションではありません)FYI
:あり
case a @ Outer.two(Inner.a(1)):
:Scalaはあなたが@
オペレーター、このようなものでそれを行うことができますこれを行うことができる構文、または私は私の問題を解決する方法を再考する必要がありますか?
は、なぜあなたは 'ケースOuter.two(Inner.a(1))と一致することはできませんか:'?それであなたは 'a == Inner.a(1)'を知っています。 –
@MartinR私は知っているだろうが、コンパイラはしないだろう - 私はそれが一致した後に 'a'を渡す必要があります。 – deanWombourne
大文字と小文字が一致すると、 'let a = Inner.a(1)'を指定できないのはなぜですか? –