mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-19 19:53:25 +01:00
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:
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user