通常,在删除请求中,响应代码为204 (no content)

当没有身体可供JSON解码时,你是如何处理这种使用组合的.

func deleteById(_ id: Int) -> AnyPublisher<Void, Error> {
    var request = URLRequest(url: URL(string: "http://domain/products/\(id)")!)
    request.httpMethod = "DELETE"

    return session.dataTaskPublisher(for: request)
            .map { (data, response) -> AnyPublisher<Void, Error> in
                Just(())
                        .setFailureType(to: Error.self)
                        .eraseToAnyPublisher()
            }
            .eraseToAnyPublisher()
}

Attempt

func deleteById(_ id: Int) -> AnyPublisher<Void, Error> {
    var request = URLRequest(url: URL(string: "http://domain/products/\(id)")!)
    request.httpMethod = "DELETE"

    return session.dataTaskPublisher(for: request)
            .map { _ in return } // return nothing
            .eraseToAnyPublisher()
}

推荐答案

URLSession.dataTaskPublisher为您提供了Failure类型的出版商URLError.您的方法的返回类型说明返回值的Failure类型应该只有Error.

请注意,flatMap只能将Failure类型更改为Never(有点像setFailureType).它不能将其更改为另一款Error.mapError是改变故障类型的原因.

return URLSession.shared.dataTaskPublisher(for: request)
    .map { _ in () } // '()' is a value of Void
    .mapError { $0 as Error }
    .eraseToAnyPublisher()

其他需要考虑的事情:

  • 返回AnyPublisher<Void, URLError>
  • 使用ignoreOutput()而不是map返回AnyPublisher<Never, URLError>.这是一个不发布任何值的发布者,只完成.

Ios相关问答推荐

如何在PINCH上添加UITextfield以zoom 图像

由于代码签名时出错,无法在iOS设备上发布iOS Maui Build

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

检测touch 并忽略其他手势SWIFT SceneKit

当操作修改查看条件时,按钮不重复

如何防止UITest套件与Fastlane一起执行?

在将Cocoapods更新到1.13.0之后,它抛出错误

WatchConnectivity - 从手表配套应用程序在 iOS 设备上启动 AVPlayer

使用异步重载实现Swift协议一致性

Flutter iOS 构建失败:DVTCoreDeviceEnabledState_Disabled

Swift 共享数据模型在页面之间进行通信.这个怎么运作

辅助功能判断器无法在 macOS Monterey 版本 12.3 上的 Xcode 版本 13.3 上运行

访问未定义的 stage_in 金属着色器参数

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

NSFetchedResultsController 由字符串的第一个字母创建的部分

在设备上卸载 ios 应用程序后如何在 ios 中保留 identifierForVendor?

ARKit vs. ARCore vs. Vuforia vs. D'Fusion Mobile vs. Layar SDK

ios 崩溃 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

使用 Xcode 4 的 iPhone 临时构建

UITableView 中的圆形 UIImageView 没有性能影响?