第一次尝试尝试错误处理和错误概念。所以我找到了这种创建错误枚举的方法。符合 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."
您的代码定义
var faliureReason
这与
failureReason
不一样。