Вы можете использовать универсальную функцию, которая принимает замыкание и возвращает кортеж.
Что-то вроде:
func handle<T>(closure:() throws -> T) -> (T?, Error?) {
do {
let result = try closure()
return (result, nil)
} catch let error {
return (nil, error)
}
}
Это определит функцию, которая принимает замыкание, которое вызывает метод, которыймогу бросить.Он возвращает кортеж с ожидаемым типом возврата и чем-то, что соответствует протоколу ошибок.
Вы могли бы использовать это так:
let result: (Void?, Error?) = handle { try someFunc() }
let result2: (Int?, Error?) = handle { try someOtherFunc(2) }
someFunc и someOtherFunc - только примеры и их подписибудет:
func someFunc() throws {}
func someOtherFunc(_ param: Int) throws -> Int {}