Shorthand 在 Swift 中从结果到未来的转换?

Shorthand conversion from Result to Future in Swift?

我想提供 Combine 完成关闭的对应项,这变得非常麻烦。是否有更短的方式或扩展可以转换以下内容:

extension MyType {
    
    func send(with request: URLRequest, completion: @escaping (Result<MyResponse, MyError>) -> Void) {
        // Logic
    }
    
    func send(with request: URLRequest) -> Future<MyResponse, MyError> {
        Future<MyResponse, MyError> { promise in
            send(with: request) { result in
                switch result {
                case let .success(response):
                    promise(.success(response))
                case let .failure(error):
                    promise(.failure(error))
                }
            }
        }
    }
}

Future 方法只是对完成闭包方法的包装。我希望至少做这样的事情:

Future<MyResponse, MyError> { send(with:request, completion: [=13=]) }

有没有更优雅的方法来做到这一点,因为这将应用于我图书馆的很多地方。

请注意,第一个 send 重载的 completion 参数的类型为:

Result<MyResponse, MyError>) -> Void

promise完全相同的类型,即

Future<MyResponse, MyError>.Promise

Promise 只是 (Result<Output, Failure>) -> Void.

的类型别名

所以你可以这样做:

Future<MyResponse, MyError> { promise in
    send(with: request, completion: promise)
}