2015-07-11 4 views
56

Я обновляю свой код, чтобы использовать Swift, и мне интересно, как печатать данные об ошибках для исключения, которое соответствует предложению 'catch all'. Я немного изменил пример из этой Swift Language Guide Page, чтобы проиллюстрировать мою точку зрения:Как распечатать сведения об исключении «catch all» в Swift?

do { 
    try vend(itemNamed: "Candy Bar") 
    // Enjoy delicious snack 
} catch VendingMachineError.InvalidSelection { 
    print("Invalid Selection.") 
} catch VendingMachineError.OutOfStock { 
    print("Out of Stock.") 
} catch VendingMachineError.InsufficientFunds(let amountRequired) { 
    print("Insufficient funds. Please insert an additional $\(amountRequired).") 
} catch { 
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE? 
} 

Если я поймаю неожиданное исключение, мне нужно, чтобы иметь возможность что-то о том, что причиной этого журнала.

ответ

84

Я только что понял. Я заметил эту линию в Swift Документация:

Если предложение поймать не указать шаблон, предложение будет соответствовать и связать любую ошибку локальной константы с именем ошибки

Итак, я попытался это:

do { 
    try vend(itemNamed: "Candy Bar") 
... 
} catch { 
    print("Error info: \(error)") 
} 

И это дало мне хорошее описание.

31

С Свифт языка программирования:

Если предложение catch не указать шаблон, предложение будет соответствовать и связать любую ошибку локальной константы с именем error.

То есть, есть в catch п неявным let error:

do { 
    // … 
} catch { 
    print("caught: \(error)") 
} 

С другой стороны, кажется, что let constant_name также правильный образец, так что вы можете использовать его, чтобы переименовать ошибку постоянной (это возможно, будет удобно, если имя error уже используется):

do { 
    // … 
} catch let myError { 
    print("caught: \(myError)") 
}