错误处理与异常抛出_Swift基础知识学习

本文介绍了Swift中的多种错误处理方式,包括使用fatalError()函数立即终止程序、通过断言和先决条件验证条件、以及如何定义并抛出自定义错误类型。还详细解释了使用枚举、结构体以及String作为错误类型的方法。

主动退出程序的几种情况

  • Fatal Errors(致命的错误)
    • 使用fatalError()函数可以立即终止你的应用程序,在fatalError()中可以给出终止信息。使用fatalError()函数,会毫无条件的终止你的应用程序,用起来也是比较简单的,就是一个函数的调用。
fatalError("致命错误,调用我程序终止")
  • Assertions(断言)
    • 在断言中的提示条件是可选的。断言会在Debug模式下起作用,但是在Release版本中就会被忽略。
// @param: condition, 为true时,断言不执行,相应的断言信息不打印。为false时,断言执行,并且打印相应的断言信息。
assert(<#T##condition: Bool##Bool#>, <#T##message: String##String#>)
  • 先决条件(Preconditions)
    • Preconditions的用法和断言一样,不过有一点需要主要,Preconditions在debug和release模式下都会被执行,除非使用–Ounchecked进行编译。
precondition(<#T##condition: Bool##Bool#>, <#T##message: String##String#>)

Swift中的错误处理

  • 在Swift中,如果你要定义你自己的错误类型,你只需要实现ErrorType协议即可。声明完错误类型后,就可以在处理错误抛出异常时使用自定义的错误类型了。
1.使用枚举创建错误类型
  • 1.1遵循ErrorType协议,自定义错误类型。下方定义了一个错误类型枚举,该枚举遵循了ErrorType协议,在接下来的代码中我们将会使用这个MyCustomErrorType枚举
// 定义错误类型
enum MyErrorType: ErrorType {
    case ErrorReason1
    case ErrorReason2
    case ErrorReason3
}
  • 1.2在我们的函数定义时可以使用throws关键字,以及在函数中使用throw关键字对错误进行抛出,抛出的错误类型就可以使用上面我们自己定义的错误类型。
func throwError() throws {
        let test: Int? = nil

        guard test != nil else {
            throw MyErrorType.ErrorReason2
        }
    }
  • 1.3上面函数的功能是对错误进行抛出,接下来就该使用do-catch来处理抛出的错误。使用try对错误进行捕捉,使用do-catch对错误进行处理。
        do {
            try throwError()
        } catch MyErrorType.ErrorReason1 {
            print("错误原因: 1")
        }catch MyErrorType.ErrorReason2 {
            print("错误原因: 2")
        }catch {
            print("错误原因: 3")
        }
2.使用结构体为错误处理添加Reason
  • 使用结构体来遵循ErrorType协议, 可以在抛出错误时,给自定义错误类型提供错误原因。
  • 2.1使用结构体创建错误类型,下方名为MyErrorType的结构体遵循了ErrorType协议,并且在MyErrorType结构体中,声明了一个reason常量,该reason常量中存储的就是错误原因
struct MyErrorType2: ErrorType {
    let reason1: String
    let reason2: String
}
  • 2.2上面定义完错误类型结构体后,在错误抛出中就可以使用了。在错误抛出时,可以传入一个错误原因
func throwError2() throws {
        let test: Int? = nil

        guard test != nil else {
            throw MyErrorType2(reason1: "原因1", reason2: "原因2")
        }
    }
  • 2.3最后要对抛出的错误进行do-catch处理,在处理时,可以对错误原因进行打印,错误原因存储在error中
        do {
            try throwError2()
        } catch {
            print(error)
        }
3.使String类型遵循ErrorType协议,直接使用String提供错误原因
  • 这种方式最为简单
extension String: ErrorType {

}

func throwError3() throws {
    let test: Int? = nil

    guard test != nil else {
        throw "error"
    }
}

do {
    try throwError3()
} catch {
    print(error)
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值