Result

public enum Result<Value>
extension Result: CustomStringConvertible
extension Result: CustomDebugStringConvertible

Used to represent whether a request was successful or encountered an error.

  • success: The request and all post processing operations were successful resulting in the serialization of the provided associated value.

  • failure: The request encountered an error resulting in a failure. The associated values are the original data provided by the server as well as the error that caused the failure.

  • Declaration

    Swift

    case success(Value)
  • Declaration

    Swift

    case failure(Error)
  • Returns true if the result is a success, false otherwise.

    Declaration

    Swift

    public var isSuccess: Bool { get }
  • Returns true if the result is a failure, false otherwise.

    Declaration

    Swift

    public var isFailure: Bool { get }
  • Returns the associated value if the result is a success, nil otherwise.

    Declaration

    Swift

    public var value: Value? { get }
  • Returns the associated error value if the result is a failure, nil otherwise.

    Declaration

    Swift

    public var error: Error? { get }

CustomStringConvertible

  • The textual representation used when written to an output stream, which includes whether the result was a success or failure.

    Declaration

    Swift

    public var description: String { get }

CustomDebugStringConvertible

  • The debug textual representation used when written to an output stream, which includes whether the result was a success or failure in addition to the value or error.

    Declaration

    Swift

    public var debugDescription: String { get }

Functional APIs

  • Creates a Result instance from the result of a closure.

    A failure result is created when the closure throws, and a success result is created when the closure succeeds without throwing an error.

    func someString() throws -> String { ... }
    
    let result = Result(value: {
        return try someString()
    })
    
    // The type of result is Result<String>
    

    The trailing closure syntax is also supported:

    let result = Result { try someString() }
    

    Declaration

    Swift

    public init(value: () throws -> Value)

    Parameters

    value

    The closure to execute and create the result for.

  • Returns the success value, or throws the failure error.

    let possibleString: Result<String> = .success("success")
    try print(possibleString.unwrap())
    // Prints "success"
    
    let noString: Result<String> = .failure(error)
    try print(noString.unwrap())
    // Throws error
    

    Declaration

    Swift

    public func unwrap() throws -> Value
  • Evaluates the specified closure when the Result is a success, passing the unwrapped value as a parameter.

    Use the map method with a closure that does not throw. For example:

    let possibleData: Result<Data> = .success(Data())
    let possibleInt = possibleData.map { $0.count }
    try print(possibleInt.unwrap())
    // Prints "0"
    
    let noData: Result<Data> = .failure(error)
    let noInt = noData.map { $0.count }
    try print(noInt.unwrap())
    // Throws error
    

    Declaration

    Swift

    public func map<T>(_ transform: (Value) -> T) -> Result<T>

    Parameters

    transform

    A closure that takes the success value of the Result instance.

    Return Value

    A Result containing the result of the given closure. If this instance is a failure, returns the same failure.

  • Evaluates the specified closure when the Result is a success, passing the unwrapped value as a parameter.

    Use the flatMap method with a closure that may throw an error. For example:

    let possibleData: Result<Data> = .success(Data(...))
    let possibleObject = possibleData.flatMap {
        try JSONSerialization.jsonObject(with: $0)
    }
    

    Declaration

    Swift

    public func flatMap<T>(_ transform: (Value) throws -> T) -> Result<T>

    Parameters

    transform

    A closure that takes the success value of the instance.

    Return Value

    A Result containing the result of the given closure. If this instance is a failure, returns the same failure.

  • Evaluates the specified closure when the Result is a failure, passing the unwrapped error as a parameter.

    Use the mapError function with a closure that does not throw. For example:

    let possibleData: Result<Data> = .failure(someError)
    let withMyError: Result<Data> = possibleData.mapError { MyError.error($0) }
    

    Declaration

    Swift

    public func mapError<T>(_ transform: (Error) -> T) -> Result where T : Error

    Parameters

    transform

    A closure that takes the error of the instance.

    Return Value

    A Result instance containing the result of the transform. If this instance is a success, returns the same instance.

  • Evaluates the specified closure when the Result is a failure, passing the unwrapped error as a parameter.

    Use the flatMapError function with a closure that may throw an error. For example:

    let possibleData: Result<Data> = .success(Data(...))
    let possibleObject = possibleData.flatMapError {
        try someFailableFunction(taking: $0)
    }
    

    Declaration

    Swift

    public func flatMapError<T>(_ transform: (Error) throws -> T) -> Result where T : Error

    Parameters

    transform

    A throwing closure that takes the error of the instance.

    Return Value

    A Result instance containing the result of the transform. If this instance is a success, returns the same instance.

  • Evaluates the specified closure when the Result is a success, passing the unwrapped value as a parameter.

    Use the withValue function to evaluate the passed closure without modifying the Result instance.

    Declaration

    Swift

    @discardableResult
    public func withValue(_ closure: (Value) throws -> Void) rethrows -> Result

    Parameters

    closure

    A closure that takes the success value of this instance.

    Return Value

    This Result instance, unmodified.

  • Evaluates the specified closure when the Result is a failure, passing the unwrapped error as a parameter.

    Use the withError function to evaluate the passed closure without modifying the Result instance.

    Declaration

    Swift

    @discardableResult
    public func withError(_ closure: (Error) throws -> Void) rethrows -> Result

    Parameters

    closure

    A closure that takes the success value of this instance.

    Return Value

    This Result instance, unmodified.

  • Evaluates the specified closure when the Result is a success.

    Use the ifSuccess function to evaluate the passed closure without modifying the Result instance.

    Declaration

    Swift

    @discardableResult
    public func ifSuccess(_ closure: () throws -> Void) rethrows -> Result

    Parameters

    closure

    A Void closure.

    Return Value

    This Result instance, unmodified.

  • Evaluates the specified closure when the Result is a failure.

    Use the ifFailure function to evaluate the passed closure without modifying the Result instance.

    Declaration

    Swift

    @discardableResult
    public func ifFailure(_ closure: () throws -> Void) rethrows -> Result

    Parameters

    closure

    A Void closure.

    Return Value

    This Result instance, unmodified.