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)
}
我想提供 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)
}