错误处理

35 阅读2分钟

基本概念

有些操作不能保证能完成执行,或者产生理想的输出。可选值表示了一个值可能存在或者不存在,但是当一个操作没有顺利执行时,有必要区分出出现错误的各种可能,并给出应对策略。比如当我们读取和处理磁盘上的文件,有很多种出现错误的可能:文件不存在,没有读取该文件的权限,文件的编码格式不兼容。通过识别出各种错误形式,我们才能让程序去解决这些问题,在不能解决问题时,更用户进行交互。

通过在定义函数时,使用关键词throws,来表明,此函数可能抛出错误,也可能不抛出错误。 通过在调用函数时,使用关键词try,来表明此函数是一个可能抛出错误的函数。

func mayThrowAnError() throws {

    // 这个函数可能抛出错误哦

}

  


do {

    try mayThrowAnError() 

}

  


catch {

    // 如果抛出错误,错误会出现在这里。

}

下边这个例子,说明了这段语法运行的逻辑

func makeASandwich() throws {

    //...

}

  


do {

    try makeASandwich() // 调用可能抛出错误的函数

    eatASandwich() // 如果没有错误抛出,则执行这一段语句

}

  


catch SandwichError.outOfCleanDishes {

    washDishes() // 如果抛出了错误,则执行这段语句

}

  


catch SandwichError.missingIngredients(let ingredients) {

    buyGroceries(ingredients) // 如果抛出了这个错误,则执行这段语句

}

在函数、方法或者初始化器后边加上throws表明它们可能抛出错误,throws 写在函数的parameters括号后边,返回值类型的前边。

func canThrowErrors() throws -> String

错误传播

使用抛出函数来将错误传播到调用该函数的范围,调用方法必须处理这些错误。\

非抛出函数不能将错误传播到调用函数的范围,非抛出函数内部发生的错误,必须在函数内部进行处理。