Изменение подписи закрытия завершения на completion: @escaping (Result<Model, Error>) -> Void
работает, но тогда я не использую пользовательский тип ошибки.
Да, вы!Измените подпись именно таким образом, чтобы вы скомпилировали и запустили свой код.Когда мы доберемся до этой строки:
case .failure(let error): print("Failed with \(error)")
... мы печатаем "Failed with somethingBadHappened"
.Это доказывает, что ваш экземпляр CustomError.somethingBadHappened
прошел нормально.
Если проблема в том, что вы хотите явно отделить свое CustomError, то выделите его явно, как только вы его поймаете:
case .failure(let error as CustomError): print(error)
default : fatalError("oops, got some other error")
Или, если вы хотите еще больше обуздать это и поймать только случай .somethingBadHappened
, укажите, что:
case .failure(CustomError.somethingBadHappened): print("Something bad happened")
default : fatalError("oops, got some other error")
Эти примеры являются искусственными, но они демонстрируют то, что они предназначены продемонстрировать - что вашиЭкземпляр CustomError выполняется с полной целостностью.