В вашем случае, если вы рассматриваете его как завершение , это означает, что его нужно вызывать независимо от того, что происходит (успешное завершение с ошибкой), оно должно возвращаться после завершения процесса .
Что вы могли бы сделать, это передать необязательные error
и product
закрытию завершения, а затем проверить, является ли ошибка nil
или нет:
func product(with id: String, _ completion: @escaping (Product?, Error?) -> ()) {
// in case of there is an error:
completion(nil, error)
return
// if things went happy:
completion(product, nil)
}
Вызов метода:
product(with: "ID") { (product, error) in
guard let returnedError = error else {
print(product)
return
}
print(returnedError)
}
Или:
product(with: "ID") { (product, error) in
if let returnedError = error {
print(returnedError)
return
}
print(product)
}