- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Swift?Error重构的基础示例详解
目录Error定义概述用枚举来表示简单的错误用结构体或其他类型表示复杂的错误处理Error的三种方式相关的一些关键词rethrowsthrowstry/try!/try?/deferfatalErrorError相关的协议LocalizedErrorCustomNSError转成NSErrorRecoverableErrorKingfisherErrorRequestErrorReasonResponseErrorReasonCacheErrorReasonProcessorErrorReasonImageSettingErrorReason便捷的检验方法属性localizedmessagedescribing
Error
在开发中,往往最容易被忽略的内容就是对错误的处理。有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就能提前做好错误处理。
定义
Swift里面的Error是一个协议
publicprotocolError:Sendable{}
Sendable:可以安全地将可发送类型的值从一个并发域传递到另一个例如,您可以在调用参与者的方法时将可发送值作为参数传递
概述
AnytypethatdeclaresconformancetotheErrorprotocolcanbeusedtorepresentanerrorinSwiftserrorhandlingsystem.BecausetheErrorprotocolhasnorequirementsofitsown,youcandeclareconformanceonanycustomtypeyoucreate.
在Swift的错误处理系统中,任何声明符合Error协议的类型都可以用来表示错误。因为Error协议没有它自己的要求,所以您可以对您创建的任何自定义类型声明一致性。
用枚举来表示简单的错误
Swift的枚举非常适合表示简单的错误。创建一个符合Error协议的枚举,并为每个可能的错误提供一个case。如果需要有关错误的其他详细信息,可以使用关联值来包含该信息。
///声明一个Int解析的Error
enumIntParsingError:Error{
///超过长度
caseoverflow
///无法解析的字符
caseinvalidInput(String)
///其他错误类型
caseother
extensionInt{
init(validatinginput:String)throws{
foritemininput{
guardlet_=item.toInt()else{
throwIntParsingError.invalidInput(String(item))
ifletint=input.toInt(){
self=int
}else{
throwIntParsingError.other
extensionCharacter{
functoInt()-Int{
letstr=String(self)
ifletint=Int(str){
returnint
returnnil
extensionString{
publicfunctoInt()-Int{
ifletnum=NumberFormatter().number(from:self){
returnValue
}else{
returnnil
letmoney:String=100块钱
leta=tryInt(validating:money)
此时的a是一个Int?类型,初始化失败就返回nil.
do{
letprice=tryInt(validating:money)
print(price)
}catchIntParsingError.invalidInput(letinvalid){
print(Invalidcharacter:(invalid))
}catchIntParsingError.overflow{
p
文档评论(0)