2017-02-22 6 views
1

У меня есть Result перечисления с соответствующими значениями:Возможно ли падение через регистр перечисления, но все еще использовать его значение?

enum Result { 
    case success(object: AnyObject) 
    case failure(errorMessage: String) 
    case reauthenticate(errorMessage: String) 
} 

Я хотел бы, чтобы справиться с failure и reauthenticate случаев одинаково, но также должен иметь доступ к соответствующему значению. Есть ли языковая функция в Swift, которая позволила мне провалиться через случай failure, не потеряв errorMessage? Что-то вроде:

switch result { 
    case .success(_): 
     // ... 
    case .failure(let errorMessage): fallthrough 
    case .reauthenticate(let errorMessage: 
     print(errorMessage) 
} 

Я знаю, что есть другие способы справиться с этим. Например, я мог бы добавить вычисленный errorMessage var на Result. Мой вопрос заключается в том, можно ли это сделать внутри оператора switch (используя fallthrough или какой-либо другой метод).

+2

Связанный: [? Есть ли способ, чтобы связать переменную с несколькими альтернативами в распределительном заявлении] (http://stackoverflow.com/questions/24004826/is -Есть-а-путь-к-Bind-а-переменной для многодисковых альтернатив-в-выключателя заявления). –

ответ

3

Вы не можете использовать fallthrough здесь, однако вы можете матч несколько случаев с соответствующими значениями, и связать соответствующее значение (ы) до тех пор, как шаблоны для каждой из привязок переменных совпадают, а значение (s) оценка для каждого шаблона используют один и тот же тип (ы) - согласно SE-0043.

Таким образом, вы можете просто сказать:

switch result { 
case .success: 
    print("success") 
case .failure(let errorMessage), .reauthenticate(let errorMessage): 
    print(errorMessage) 
} 
Смежные вопросы