我试图实现的是在swift 3中执行URLSession个请求.我在一个单独的函数中执行这个操作(以便不为GET和POST单独编写代码),并返回URLSessionDataTask并处理闭包中的成功和失败.有点像这样-

let task = URLSession.shared.dataTask(with: request) { (data, uRLResponse, responseError) in

     DispatchQueue.main.async {

          var httpResponse = uRLResponse as! HTTPURLResponse

          if responseError != nil && httpResponse.statusCode == 200{

               successHandler(data!)

          }else{

               if(responseError == nil){
                     //Trying to achieve something like below 2 lines
                     //Following line throws an error soo its not possible
                     //var errorTemp = Error(domain:"", code:httpResponse.statusCode, userInfo:nil)

                     //failureHandler(errorTemp)

               }else{

                     failureHandler(responseError!)
               }
          }
     }
}

我不希望处理此函数中的错误条件,而希望使用响应代码生成错误,并返回此错误以在调用此函数的任何位置处理它. 有人能告诉我怎么做吗?或者这不是处理这种情况的"快速"方式吗?

推荐答案

您可以使用以下值创建符合Swift LocalizedError协议的协议:

protocol OurErrorProtocol: LocalizedError {

    var title: String? { get }
    var code: Int { get }
}

这使我们能够创建具体的错误,如下所示:

struct CustomError: OurErrorProtocol {

    var title: String?
    var code: Int
    var errorDescription: String? { return _description }
    var failureReason: String? { return _description }

    private var _description: String

    init(title: String?, description: String, code: Int) {
        self.title = title ?? "Error"
        self._description = description
        self.code = code
    }
}

Ios相关问答推荐

SWIFT设备方向更新不正确

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

在许多UIButton中对齐文本,即使SF Symbols(或其他图像)具有不同的宽度?

在SwiftUI中插入绘制重复形状

在嵌套的DISPATCH_AFTER块中正确使用strong自/弱自

由于已存在同名项目,因此无法将Mapbox.xcframework-ios.sign复制到Signature中

Swift中是否有一种方法可以为可选属性创建一个计算(computed)属性

Swift Combine:prepend() before share() 阻止初始接收器执行

xcode-select:找不到clang

Xcode 不支持 iOS 15.6

使用 CIImage 支持的 UIImage 设置 UIImageView 时发生罕见的崩溃

Swift如何表示单位转换的标准大气压

如何使用 swift 显示 .svg 图像

Swift tableView 分页

如何比较两个 UIImage 对象

由于 NSInvalidUnarchiveOperationException 导致 iOS11 WKWebview 崩溃

iOS在应用程序中下载并保存图像

在 Objective-C 中将所有文本转换为小写

如何删除 Swift 数组中的所有 nil 元素?

值/对象的 NSDictionary 键?