Swift 自定义 LocalizedError 在调用者 CatchBlock 中丢失失败原因

问题描述 投票:0回答:1

第一次尝试尝试错误处理和错误概念。所以我找到了这种创建错误枚举的方法。符合 LocalizedError 协议,我希望将 failureReason 作为进一步的解释。以下是执行此操作的枚举。

enum NetworkError : LocalizedError {
  case invalidInput(String)
  case unexpected
  case invalidURL(_ url: URL)
  case apiError(statusCode: Int)
  
  var faliureReason: String? {
    switch self {
    case .invalidInput:
      return "Request body is nil."
    case .unexpected:
      return "..."
    case .invalidURL(_):
      return "..."
    case .apiError(statusCode: let statusCode):
      return "..."
    }
  }
}

在我的调用函数中,我有一个 catch 块,但 error.failureReason 属性仍然为零。

func updateItem() async {
    guard let car = car else { return }
    
    let resource = PostCarResource(car: car)
    let request = APIRequest(resource: resource)
    
    var errorMessage = nil
    
    do {
      try await request.execute()
    } catch let error as LocalizedError {
      self.errorMessage = error.localizedDescription
      print(".")
      print("self.errorMessage")
      print(self.errorMessage)
      print(".")
      print("error.failureReason")
      print(error.failureReason ?? "no Reason")
      print(".")
      print("error")
      print(error)
      print(".")
      print("dump")
      dump(error)
    } catch {
      dump(error)
    }
  }

我希望在错误被正确设置为 .invalidInput (正确发生的情况)之后,我可以使用 error.failureReason 但事实并非如此。那么为什么我没有得到字符串“请求正文为零。”

我的控制台的输出如下所示:

.
self.errorMessage
Optional("The operation couldn’t be completed. (CarUSell.NetworkError error 0.)")
.
error.failureReason
no Reason
.
error
invalidInput("Request body is nil.")
.
dump
▿ -.NetworkError.invalidInput
  - invalidInput: "Request body is nil."
swift macos swiftui error-handling
1个回答
0
投票

您的代码定义

var faliureReason

这与

failureReason
不一样。

© www.soinside.com 2019 - 2024. All rights reserved.