2016年12月7日水曜日

Enum/Switch使用時はoptionalに注意

以下のようにEnumが定義されている時に、

enum fukidasiState {
    case 標準
    case 枠だけ
    case 透明

}


たとえば以下のようなswitch文を書く。
//currentの吹き出しを辞書から取り出す
let fd = fukidasiDic[currentFukidasiID]
            
//タップするたびに枠だけ、透明、不透明をスイッチ
switch fd?.fukidasiState {
    case .標準:
        (何かの処理)
    case .枠だけ:
        (何かの処理)
    case .透明:
        (何かの処理)
    }

しかし、
case .標準:
の行で「Enum case '標準' not found in type 'fukidasiState?'」というエラーが出てうまくいかない。
Xcodeで自動で修正候補を出してもくれない。
これはoptionalが関係するようで、以下のように( )!でくくってやるとうまくいく。

switch (fd?.fukidasiState)! {

値がnilになる場合に?を付けたり、使用時に!でアンラップしたりとなんだかわかりにくいoptionalだ。
Swiftを学習するならoptionalは重要な胆になるだろうね。

Enum以外、Switch以外でもエラーは出るけど、単純なものならXcodeで修正候補を出してくれるけど、今回のケースでは出してくれなかったのでだいぶ悩んでしまった。

optionalについてはSwift2.xでも仕様が変更されたり、いろいろめんどかった。早く仕様が固まってくれるといいが。

0 件のコメント:

コメントを投稿