Skip to content

Instantly share code, notes, and snippets.

@SeRG1k17
Last active September 16, 2021 11:06
Show Gist options
  • Save SeRG1k17/045269ad35ca665d1be0f2a1e4b51026 to your computer and use it in GitHub Desktop.
Save SeRG1k17/045269ad35ca665d1be0f2a1e4b51026 to your computer and use it in GitHub Desktop.
```swift
import Combine
extension Publisher {
func fromResult<T, E>() -> AnyPublisher<T, E>
where Self.Failure == Never, Self.Output == Result<T, E>, E: Error {
setFailureType(to: E.self)
.tryMap { (result: Self.Output) -> T in
switch result {
case .success(let element):
return element
case .failure(let error):
throw error
}
}
.eraseToAnyPublisher()
// Cannot convert return expression of type 'AnyPublisher<T, Error>' to return type 'AnyPublisher<T, E>'
// 1. Arguments to generic parameter 'Failure' ('Error' and 'E') are expected to be equal
}
}
```
Test:
```swift
enum MyErr: Error {}
let subject = PassthroughSubject<Result<Int, MyErr>, Never>()
subject.fromResult()
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment