я пытаюсь просто передать функцию метания в качестве аргумента другой функции, которая будет справляться с обработкой ошибок Свифта:Передача метания функции в качестве аргументов
enum Err: ErrorType {
case pfui
}
func bad(i: Int) throws -> String {
if i < 10 {
return String(i)
} else {
throw Err.pfui
}
}
func handle(@autoclosure f:() throws -> String) -> String {
do {
return try f()
}
catch {
return "oh snap"
}
}
// error: call can throw but is not marked with 'try'
handle(bad(3))
Это должно быть что-то простое, что мне не хватает, но почему-то атрибут autoclosure не позволяет компилятору думать, что я на самом деле его называю.
Идея заключалась в том, чтобы обрабатывать ошибку внутри 'handle', поэтому' rethrows' не то, что я искал. Код уменьшен, чтобы проиллюстрировать проблему; в моем приложении я использую функцию дескриптора, чтобы изменить модель обработки ошибок из 'do' /' try'/'catch' swift, которая мне не нравится, к модели, основанной на« Result ». –
Это проясняет ситуацию. Я оставлю ответ на случай, если другие заинтересованы в ключевом слове 'rethrows'. Удачи :) –