swift – 捕获多个errorTypes?

swift – 捕获多个errorTypes?,第1张

概述我正在寻找一种方法来捕获catch中的多种类型的错误.我尝试过fallthrough和逗号分隔样式与switch语句,但都不起作用. docs没有提及捕获多个但是 pattern 1.我不清楚哪种模式语法可以在这里工作. 错误定义(示例): enum AppErrors { case NotFound(objectType: String, id: Int) case AlreadyUse 我正在寻找一种方法来捕获catch中的多种类型的错误.我尝试过fallthrough和逗号分隔样式与switch语句,但都不起作用. docs没有提及捕获多个但是 pattern 1.我不清楚哪种模式语法可以在这里工作.

错误定义(示例):

enum AppErrors {  case NotFound(objectType: String,ID: Int)  case AlreadyUsed}

作品:

do {  //...} catch AppErrors.NotFound {  makeNewOne()} catch AppErrors.AlreadyUsed {  makeNewOne()} catch {  print("Unhandled error: \(error)")}

不编译,是否可以做这样的事情?

do {  //...} catch AppErrors.NotFound,AppErrors.AlreadyUsed {  makeNewOne()} catch {  print("Unhandled error: \(error)")}
如果要捕获所有AppErrors,可以使用此模式:
catch is AppErrors

如果你正在寻找更具体的匹配,它似乎很快变得难看.

这将让我们捕获AppErrors的特定情况:

catch let error as AppErrors where error == .NotFound || error == .AlreadyUsed

还有这种语法似乎有效:

catch let error as AppErrors where [.NotFound,.AlreadyUsed].contains(error)

为了完整起见,我还将添加此选项,它允许我们捕获两种不同类型的错误,但它不允许我们指定这些类型中的哪种情况:

catch let error where error is AppErrors || error is NSError

最后,基于我们捕获的任何内容都符合ErrorType协议的事实,我们可以清理第二个&第三个例子我提供了一个ErrorType扩展,并将它与catch中的where子句结合使用:

extension ErrorType {    var isFooError: Bool {        guard let err = self as? AppErrors else { return false }        return err == .NotFound || err == .AlreadyUsed    }}

然后像这样抓住它:

catch let error where error.isFooError
总结

以上是内存溢出为你收集整理的swift – 捕获多个errorTypes?全部内容,希望文章能够帮你解决swift – 捕获多个errorTypes?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1043907.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存