详解Swift中的错误处理

本文详细介绍了Swift中的错误处理机制,包括Optional、Error协议、throws、defer、rethrows、Result类型及其链式调用,以及如何从Objective C桥接错误处理。Swift提供了强类型的错误处理方式,提高了代码的健壮性和稳定性。
摘要由CSDN通过智能技术生成

前言

任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃。良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性。

本文的Swift版本:Swift 3

Objective C

返回nil

如果出错了,就返回空是Objective C中的一种常见的处理方式。因为在Objective C中,向nil发送消息是安全的。比如:

- (instancetype)init
{
    self = [super init];
    if (self) {

    }
    //如果初始化失败,会返回nil
    return self;
}

断言

断言指定了我们方法的上下文,如果断言不满足,则在Debug环境下会直接crash。

比如:AFNetworking中的af_resume方法

- (void)af_resume {
    NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state");
    NSURLSessionTaskState state = [self state];
    [self af_resume];

    if (state != NSURLSessionTaskStateRunning) {
        [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self];
    }
}

返回状态码

返回状态码和全局错误信息往往是在一起使用的。这种错误的处理方式常见于用Objective C来封装C的代码,或者纯C的方法。比如sqlite中的错误处理:

int result = sqlite3_open(dbPath,&_db );
if(result != SQLITE_OK) {
  //如果出错

}

又比如,Data写入到文件

BOOL succeed = [currentData writeToFile:path atomically:YES];

NSError

NSError是Cocoa中推荐的错误处理方式
使用NSError来处理错误的例子遍布整个CocoaTouch框架。
比如:NSFileManager

NSFileManager * fm  = [NSFileManager defaultManager];
NSError * error;
[fm removeItemAtPath:path error:&error];

又比如,NSURLSession通过NSError来传递错误信息

[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

}];

一个NSError包括了错误的详细信息:主要有以下几个信息

  • code 错误的状态码
  • domain 错误的域
  • userInfo 错误的详细信息

比如,常见的NSURLErrorDomain,也就是网络请求失败:

    NSURLErrorCancelled = -999,
    NSURLErrorBadURL = -1000,
    NSURLErrorTim
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值