2016-06-20 2 views
3

Как можно было бы написать это:complementery из если дело

if case .SomeEnum(3) = enumType where myInt == 3 { 
    //I don't need this case 
} else { 
    //This is the case I need 
} 

Я знаю, что я мог бы использовать guard:

guard case .SomeEnum(3) = enumType where myInt == 3 else { 
    //This is the case I need 
} 

, но я не думаю, что он чист, так как это не совсем случай, когда функция не может закончить. Кроме того, guard ожидает, что я вернусь от функции.

Любые другие альтернативы?

+0

Не может быть просто 'if .SomeEnum! = EnumType || myInt! = 3'? – Alexander

+0

'.SomeEnum! = EnumType' или' .SomeEnum == enumType' дает ошибки компилятора, так как перечисления имеют параметры – Daniel

+0

О, я вижу. Хороший вопрос :) – Alexander

ответ

3

Вы не можете отрицать шаблон (насколько я знаю), и ваше первое решение с помощью if/else выглядит хорошо для меня, намерение кода явно видно.

заявление переключатель будет альтернатива:

switch enumType { 
case .SomeEnum(3) where myInt == 3: 
    break // I don't need this case 
default: 
    // This is the case I need 
    // ... 
} 

Что касается вашего замечания

Кроме того, охранник ожидает меня, чтобы вернуться из функции.

это не совсем так. Ожидается, что вы оставите текущую область действия. Так это будет компилировать и работать, как ожидалось:

repeat { 
    guard case .SomeEnum(3) = enumType where myInt == 3 else { 
     // This is the case I need 
     // ... 
     break 
    } 
} while false 

, но я не считаю, что лучшим решением.

+0

У меня была такая же идея с использованием 'switch', * не нужен * pattern - это случай .SomeEnum (let value) где value == 3 && value == myInt:' или, может быть, даже просто 'case .SomeEnum (let value) где значение == myInt: ' – vadian

+0

@vadian:' case .SomeEnum (3) где myInt == 3: 'будет тем же шаблоном, что и в вопросе. –

+0

@vadian: 'case .SomeEnum (пусть значение), где значение == myInt:' (если это то, что фактически означает OP) можно сократить до 'case .SomeEnum (myInt):' –

Смежные вопросы