Я хотел бы сделать исключение из некоторой "глубокой" функции, поэтому он пузырится до другой функции, где я хочу ее поймать.
f1
вызывает f2
вызывает f3
вызовы... fN
, которые могут вызывать ошибку
Я хотел бы поймать ошибку из f1
.
Я читал, что в Swift мне нужно объявить все методы с помощью throws
, а также вызвать их с помощью try
.
Но это довольно раздражает:
enum MyErrorType : ErrorType {
case SomeError
}
func f1() {
do {
try f2()
} catch {
print("recovered")
}
}
func f2() throws {
try f3()
}
func f3() throws {
try f4()
}
...
func fN() throws {
if (someCondition) {
throw MyErrorType.SomeError
}
}
Не существует ли аналогичная концепция для RuntimeException
в Java, где throws
не протекает по всей цепочке вызовов?