Быстрый синтаксис do-try-catch
Я попытаюсь понять новую вещь по обработке ошибок в swift 2. Вот что я сделал: я сначала объявил enum:
enum SandwichError: ErrorType {
case NotMe
case DoItYourself
}
А потом я объявил метод, который выдает ошибку (не исключение, ребята. Это ошибка.). Вот этот метод:
func makeMeSandwich(names: [String: String]) throws -> String {
guard let sandwich = names["sandwich"] else {
throw SandwichError.NotMe
}
return sandwich
}
Проблема с вызывающей стороны. Вот код, который вызывает этот метод:
let kitchen = ["sandwich": "ready", "breakfeast": "not ready"]
do {
let sandwich = try makeMeSandwich(kitchen)
print("i eat it \(sandwich)")
} catch SandwichError.NotMe {
print("Not me error")
} catch SandwichError.DoItYourself {
print("do it error")
}
Послеdo
Линейный компилятор говоритErrors thrown from here are not handled because the enclosing catch is not exhaustive
, Но, на мой взгляд, это исчерпывающий, потому что есть только два случая вSandwichError
ENUM.
Для регулярных операторов переключения swift может понять, что он исчерпывающий, когда обрабатывается каждый случай.