switch 文の case は異なる値しか取れないはずなので、
それが判断できるよう、定数(リテラルを含む)でなければならないっぽい。

ブロックがイニシャライザの副産物であるという話は聞いたことがないな。
よく、横着して別メソッドにせずに case 文にブロックを使ってる。
リファクタリングするような状況になったら、だいたい switch 文まるごとだし。