美文网首页
Swift 处理异常

Swift 处理异常

作者: li_礼光 | 来源:发表于2018-07-05 17:16 被阅读8次

处理方式

//  方式一:try方式 程序员手动捕捉异常
do {
    try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)
} catch {
    // error异常的对象
    print(error)
}

//  方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象
guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {
    return
}

//  方式三:try!方法(不建议,非常危险) 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)
let anyObject = try!NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)

定义异常类型

在 Swift 中,错误用符合Error协议的类型的值来表示。这个空协议表明该类型可以用于错误处理。

Swift 的枚举类型尤为适合构建一组相关的错误状态,枚举的关联值还可以提供错误状态的额外信息。

enum ExceptionError: Error {
    case ExceptionErrorA        //异常错误A
    case ExceptionErrorB        //异常错误B
    case ExceptionErrorC        //异常错误C
}

抛出一个错误可以让你表明有意外情况发生,导致正常的执行流程无法继续执行。抛出错误使用throw关键字。

定义异常函数

func canThrowErrors(type: Int) throws -> String? {
    //函数体写成switch/case更好一些
    if type == 1 {
        throw ExceptionError.exceptionErrorA
    }
    if type == 2 {
        throw ExceptionError.exceptionErrorB
    }
    if type == 3 {
        throw ExceptionError.exceptionErrorC
    }
    return "success"
}

异常处理 (方式一)

do {
    let data = try canThrowErrors(type: 1)//执行这个函数 这个函数可能抛出异常
    if let d = data {
        print(d)
    } else {
        print("nil")
    }
} catch ExceptionError.exceptionErrorA {
    print("exceptionErrorA")
} catch ExceptionError.exceptionErrorB {
    print("exceptionErrorB")
} catch ExceptionError.exceptionErrorC {
    print("exceptionErrorC")
} catch {
    print("exceptionErrorMore")
}

异常处理 (方式二)

print("\(String(describing: try? canThrowErrors(type: 1)))")

异常处理 (方式三)

 这个把上面的try?改为try!就好

异常处理 defer (指定清理操作)

可以使用defer语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工作,不管是以何种方式离开当前代码块的——无论是由于抛出错误而离开,或是由于诸如return、break的语句。例如,你可以用defer语句来确保文件描述符得以关闭,以及手动分配的内存得以释放。

defer语句将代码的执行延迟到当前的作用域退出之前。该语句由defer关键字和要被延迟执行的语句组成。延迟执行的语句不能包含任何控制转移语句,例如break、return语句,或是抛出一个错误。

  • 延迟执行的操作会按照它们声明的顺序从后往前执行——也就是说,第一条defer语句中的代码最后才执行,第二条defer语句中的代码倒数第二个执行,以此类推。最后一条语句会第一个执行
func canThrowErrors(type: Int) throws -> String? {
    defer {//抛出异常就执行defer 为抛出异常就最后执行defer
        print("canThrowErrors defer Top")
    }
        
    defer {//抛出异常就执行defer 为抛出异常就最后执行defer
        print("canThrowErrors defer Middle")
    }
        
    defer {//抛出异常就执行defer 为抛出异常就最后执行defer
        print("canThrowErrors defer Bottom")
    }
        
    //函数体写成switch/case更好一些
    if type == 1 {
        throw ExceptionError.exceptionErrorA
    }
    if type == 2 {
        throw ExceptionError.exceptionErrorB
    }
    if type == 3 {
        throw ExceptionError.exceptionErrorC
    }
    return "success"
}

再执行一遍方式一,打印结果

canThrowErrors defer Bottom
canThrowErrors defer Middle
canThrowErrors defer Top
exceptionErrorA

相关文章

  • swift异常处理

    swift像其他编程语言一样可以抛出异常并处理异常,本文就详细说一下在swift中抛出并处理异常,swift中的一...

  • Swift-异常处理四种方式

    跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处理的能...

  • SQLite.swift的使用

    知识储备:swift中异常处理 SQLite.swift这个库中有很多的异常处理,详细了解请点击下面的地址: Sw...

  • Swift - 异常处理

    说明 跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处...

  • Swift备忘

    Swift初体验 Swift Tips Swift三种不同的【异常处理方式】 Swift 3.0 private变...

  • Swift 处理异常

    处理方式 定义异常类型 在 Swift 中,错误用符合Error协议的类型的值来表示。这个空协议表明该类型可以用于...

  • swift——异常处理

    FileManager.swift ViewController.swift

  • swift 异常处理

    序言 对异常的正确处理能够明确反映在代码执行中出现的问题,使得在接下来的debug快速定位问题所在的地方,提高de...

  • Swift 异常处理

    异常的由来 在写代码的过程中,我们不能保证自己的每一行代码,都能够正确地执行。不能保证每一个函数,都会返回我们所期...

  • Swift - 异常处理

    Swift提供了一流的异常抛出、捕获和处理 能力,跟JAVA语言类似。Swift的异常并不是真正的程序崩溃, 而是...

网友评论

      本文标题:Swift 处理异常

      本文链接:https://www.haomeiwen.com/subject/aaguuftx.html