コンパイラのバグか、気付いていないものがあるかどうかわかりません。私はコンパイル時にSegmentation fault: 11
を取得プロトコルとのスウィートパターンの一致
switch (param) {
case (.a, let param as Equatable),
(.b, let param as Equatable):
print("a or b with protocol \(param)")
default: print("none of above")
}
:ように私は、プロトコルにマッチしたい場合は、しかし、
enum SomeEnum {
case a, b, c
}
let param: (SomeEnum, Any) = something
switch (param) {
case (.a, let param as Int),
(.b, let param as Int):
print("a or b with solid type (Int) \(param)")
default: print("none of above")
}
:コンクリートの種類と照合すると
私のような2例を組み合わせることができます。このためのソリューションは、次のようなコードを複製することです:
switch (param) {
case (.a, let param as Equatable):
print("a or b with protocol \(param)")
case (.b, let param as Equatable):
print("a or b with protocol \(param)")
default: print("none of above")
}
誰かがこのように動作する理由を教えてもらえますか?
クラッシュコンパイラは*必ず*バグです。 –
segfaultは、常に、コンパイラのバグです。 https://bugs.swift.org/secure/Dashboard.jspaまたはhttps://bugreport.apple.com/また、https://github.com/practicalswift/swift-compiler-crashesに寄付することもできます。 –
やや良い回避策として、最初のケースで 'fallthrough'を使うことができます。 –