Adds ResultOperation.localizedFailure

Allows ResultOperations to provide default localized failures for errors that don’t have their own localized failure.
This commit is contained in:
Riley Testut
2022-11-15 17:05:39 -06:00
parent e2df5a46e6
commit 0c4fe98370

View File

@@ -13,6 +13,9 @@ class ResultOperation<ResultType>: Operation
{
var resultHandler: ((Result<ResultType, Error>) -> Void)?
// Should only be set by subclasses.
var localizedFailure: String?
@available(*, unavailable)
override func finish()
{
@@ -23,15 +26,21 @@ class ResultOperation<ResultType>: Operation
{
guard !self.isFinished else { return }
var result = result
if self.isCancelled
{
self.resultHandler?(.failure(OperationError.cancelled))
result = .failure(OperationError.cancelled)
}
else
else if case .failure(let nsError as NSError) = result, let localizedFailure, nsError.localizedFailure == nil
{
self.resultHandler?(result)
// Error does not have localizedFailure, so give it the Operation's failure (if one exists).
let error = nsError.withLocalizedFailure(localizedFailure)
result = .failure(error)
}
self.resultHandler?(result)
super.finish()
}
}