Xcode 7b2でSwift 2コードを使用すると、次のようになります。
スイッチの場合、コンパイラは次の警告を返します。
Default will never be executed
コード :
switch(type) {
case .foo:
return "foo"
case .bar:
return "bar"
case .baz:
return "baz"
default:
return "?"
}
なぜ警告があるのですか?
私はその理由を理解しました:
私が「切り替えた」オブジェクトはenum
であり、私のenum
には3つのエントリしかありません:.foo
、.bar
、baz
。
enum
のすべての可能性がテストされるため、コンパイラーはデフォルトの必要がないことを理解します。
この警告は open-closed主義 に違反していると思います。後でenum値を追加すると、デフォルトが欠落し、コードの動作を予測できなくなります。だから、この場所も変えなければならない。とにかく、switch()を使用すると、この原則に違反します。
これは、type
が3つのケースを持つ列挙型であり、コンパイラがswitchステートメントが完全であることを認識しているため、すべての可能なケースを処理するためにdefault
ステートメントを必要としないためです。