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)? var resultHandler: ((Result<ResultType, Error>) -> Void)?
// Should only be set by subclasses.
var localizedFailure: String?
@available(*, unavailable) @available(*, unavailable)
override func finish() override func finish()
{ {
@@ -23,15 +26,21 @@ class ResultOperation<ResultType>: Operation
{ {
guard !self.isFinished else { return } guard !self.isFinished else { return }
var result = result
if self.isCancelled 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() super.finish()
} }
} }