swift – 捕获多个errorTypes?
发布时间:2020-12-14 05:40:28 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来捕获catch中的多种类型的错误.我尝试过fallthrough和逗号分隔样式与switch语句,但都不起作用. docs没有提及捕获多个但是 pattern 1 .我不清楚哪种模式语法可以在这里工作. 错误定义(示例): enum AppErrors { case NotFound(objectType:
我正在寻找一种方法来捕获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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |