Upgrade version of RxSwift, RxCocoa, Alamofire.
This commit is contained in:
200
Pods/Alamofire/Source/Result.swift
generated
200
Pods/Alamofire/Source/Result.swift
generated
@ -1,7 +1,7 @@
|
||||
//
|
||||
// Result.swift
|
||||
//
|
||||
// Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)
|
||||
// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -100,3 +100,201 @@ extension Result: CustomDebugStringConvertible {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Functional APIs
|
||||
|
||||
extension Result {
|
||||
/// 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() }
|
||||
///
|
||||
/// - parameter value: The closure to execute and create the result for.
|
||||
public init(value: () throws -> Value) {
|
||||
do {
|
||||
self = try .success(value())
|
||||
} catch {
|
||||
self = .failure(error)
|
||||
}
|
||||
}
|
||||
|
||||
/// 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
|
||||
public func unwrap() throws -> Value {
|
||||
switch self {
|
||||
case .success(let value):
|
||||
return value
|
||||
case .failure(let error):
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
/// 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
|
||||
///
|
||||
/// - parameter transform: A closure that takes the success value of the `Result` instance.
|
||||
///
|
||||
/// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the
|
||||
/// same failure.
|
||||
public func map<T>(_ transform: (Value) -> T) -> Result<T> {
|
||||
switch self {
|
||||
case .success(let value):
|
||||
return .success(transform(value))
|
||||
case .failure(let error):
|
||||
return .failure(error)
|
||||
}
|
||||
}
|
||||
|
||||
/// 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)
|
||||
/// }
|
||||
///
|
||||
/// - parameter transform: A closure that takes the success value of the instance.
|
||||
///
|
||||
/// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the
|
||||
/// same failure.
|
||||
public func flatMap<T>(_ transform: (Value) throws -> T) -> Result<T> {
|
||||
switch self {
|
||||
case .success(let value):
|
||||
do {
|
||||
return try .success(transform(value))
|
||||
} catch {
|
||||
return .failure(error)
|
||||
}
|
||||
case .failure(let error):
|
||||
return .failure(error)
|
||||
}
|
||||
}
|
||||
|
||||
/// 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) }
|
||||
///
|
||||
/// - Parameter transform: A closure that takes the error of the instance.
|
||||
/// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns
|
||||
/// the same instance.
|
||||
public func mapError<T: Error>(_ transform: (Error) -> T) -> Result {
|
||||
switch self {
|
||||
case .failure(let error):
|
||||
return .failure(transform(error))
|
||||
case .success:
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
/// 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)
|
||||
/// }
|
||||
///
|
||||
/// - Parameter transform: A throwing closure that takes the error of the instance.
|
||||
///
|
||||
/// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns
|
||||
/// the same instance.
|
||||
public func flatMapError<T: Error>(_ transform: (Error) throws -> T) -> Result {
|
||||
switch self {
|
||||
case .failure(let error):
|
||||
do {
|
||||
return try .failure(transform(error))
|
||||
} catch {
|
||||
return .failure(error)
|
||||
}
|
||||
case .success:
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
/// 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.
|
||||
///
|
||||
/// - Parameter closure: A closure that takes the success value of this instance.
|
||||
/// - Returns: This `Result` instance, unmodified.
|
||||
@discardableResult
|
||||
public func withValue(_ closure: (Value) -> Void) -> Result {
|
||||
if case let .success(value) = self { closure(value) }
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
/// 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.
|
||||
///
|
||||
/// - Parameter closure: A closure that takes the success value of this instance.
|
||||
/// - Returns: This `Result` instance, unmodified.
|
||||
@discardableResult
|
||||
public func withError(_ closure: (Error) -> Void) -> Result {
|
||||
if case let .failure(error) = self { closure(error) }
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
/// Evaluates the specified closure when the `Result` is a success.
|
||||
///
|
||||
/// Use the `ifSuccess` function to evaluate the passed closure without modifying the `Result` instance.
|
||||
///
|
||||
/// - Parameter closure: A `Void` closure.
|
||||
/// - Returns: This `Result` instance, unmodified.
|
||||
@discardableResult
|
||||
public func ifSuccess(_ closure: () -> Void) -> Result {
|
||||
if isSuccess { closure() }
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
/// Evaluates the specified closure when the `Result` is a failure.
|
||||
///
|
||||
/// Use the `ifFailure` function to evaluate the passed closure without modifying the `Result` instance.
|
||||
///
|
||||
/// - Parameter closure: A `Void` closure.
|
||||
/// - Returns: This `Result` instance, unmodified.
|
||||
@discardableResult
|
||||
public func ifFailure(_ closure: () -> Void) -> Result {
|
||||
if isFailure { closure() }
|
||||
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user