美文网首页
Swift语言错误处理

Swift语言错误处理

作者: 野比大雄001 | 来源:发表于2017-06-07 15:09 被阅读17次

    1.swift在运行时对可恢复错误的抛出、捕获、传递和操作的支持。

    2.在swift中,错误用符合ErrorType协议的类型的值来表示:

    enum VendingMachineError: ErrorType {

    case InvalidSelection//选择无效

    case InsufficientFunds(coinsNeeded: Int) //金额不足

    case OutOfStock//缺货

    }

    3.swift中有4种处理错误的方式:

    a.把函数抛出的错误传递给调用此函数的代码throwing函数

    b.用do-catch语句处理错误do...catch

    c.将错误作为可选类型处理try?

    d.或者断言此错误根本不会发生try!

    为了表示一个函数、方法或构造器可以抛出错误,在函数声明的参数列表之后加上throws关键字。一个标有throws关键字的函数被称作throwing函数。如果这个函数指明了返回值类型,throws关键词需要写在箭头(->)的前面。

    方式一:用throwing函数传递错误

    func vend(itemNamed name: String) throws{}

    func canThrowErrors() throws -> String{}

    如果在调用系统某一个方法时,该方法最后有一个throws.说明该方法会抛出异常.如果一个方法会抛出异常,那么需要对该异常进行处理

    方式二: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)

    4.swift中指定清理操作:

    可以使用defer语句在即将离开当前代码块时执行一系列语句。例如,你可以用defer语句来确保文件描述符得以关闭,以及手动分配的内存得以释放。

    defer语句将代码的执行延迟到当前的作用域退出之前。延迟执行的操作会按照它们被指定时的顺序的相反顺序执行——也就是说,第一条defer语句中的代码会在第二条defer语句中的代码被执行之后才执行,以此类推。

    func processFile(filename: String) throws {

    if exists(filename) {

    let file = open(filename)

    defer {

    close(file)

    }

    while let line = try file.readline() {

    //处理文件。

    }

    // close(file)会在这里被调用,即作用域的最后。

    }

    }

    相关文章

      网友评论

          本文标题:Swift语言错误处理

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