0

我正在尝试通过进行一些自定义检查并抛出我自己的自定义错误来检查请求可能引发的确切错误。

if let cause = resource.latestError?.cause {
    if case RequestError.Cause.RequestCancelled = cause {

    }
}

我收到此错误:

参数类型“RequestError.Cause.RequestCancelled.Type”不符合预期类型“_ErrorCodeProtocol”

有什么想法可以检查错误的确切原因是什么,然后返回我自己的自定义错误?

4

1 回答 1

3

Siesta 的错误原因对扩展开放,因此不是 enum,因此if case语法不适用于它们。(你得到的编译器错误是因为 Swift 认为你试图case从一个没有错误代码的错误中提取错误代码。)

Siesta 的错误原因是不同类型的树。而不是使用if case,匹配错误导致使用is

if let cause = resource.latestError?.cause {
  if cause is RequestError.Cause.RequestCancelled {

  }
}

……或者简单地说:

if resource.latestError?.cause is RequestError.Cause.RequestCancelled {

}

…或者如果您需要将类型缩小的错误分配给一个变量,以便您可以进一步使用它:

if let cause = resource.latestError?.cause as? RequestError.Cause.RequestCancelled {

}
于 2017-12-28T17:49:31.083 回答