美文网首页
swift3 错误和异常处理

swift3 错误和异常处理

作者: 文瑶906 | 来源:发表于2017-06-29 11:43 被阅读0次

    本文是 swifter-tips 的笔记

    异常 和 错误

    异常

    异常往往是由程序员的错误导致的app无法继续运行。
    例如:

    • 向一个无法响应某个消息的NSObject 对象发送了消息,会得到 NSInvalidArgumentException 的异常,并告诉
      程序员 ““unrecognized selector sent to instance”
    • 程序员使用一个超过数组元素数量的下标来试图访问 NSArray 的元素时,会得到 NSRangeException .

    这种错误所导致的程序无法运行的问题是在开发阶段就全部解决的,而不应当出现在上架APP中。

    错误

    • 由 NSError 代表的错误更多的指那些 “合理的”,用户在使用app中可能遇到的情况。
      例如:
    • 登录时候用户名密码验证后不匹配
    • 试图从某个文件中读取数据生成 NSData 对象时发生了问题(比如文件被意外修改了)等等

    但 NSError 的使用方式其实在变相的鼓励开发者忽略错误。
    例如:

    [data writeToFile: path options: options error: nil];
    

    在swift2.0 中 ,带有 NSError 指针作为参数的API 都被改成了可以抛出异常的形式。

    open func write(toFile path: String, 
        options writeOptionsMask: NSData.WritingOptions) throws
    

    使用方法为:

    do {
        try d.write(toFile: "Hello", options: [])
    } catch let error as NSError {
        print ("Error: \(error.domain)")
    }
    

    try 和 throws

    try

    • try!标识强制执行,代表你确定知道这次调用不会抛出异常,如果调用中出现了移仓,程序崩溃。
    • try? 返回一个Optional值,如果运行成功,没有抛出错误,会返回一个包含这条语句的返回值,否者返回nil

    throws

    • 在一个可以throw的方法里,我们永远不应该返回一个Optional的值。
    • 因为结合 try? 使用的话,这个 Optional 值将再次包装一层 Optional ,这种双重的 Optional 值 非常容易出现 错误。也十分迷惑。

    rethrows

    • 和 throws 做的事情没有太多不同,都是标记了一个方法应该抛出错误
    • rethrows 一般用在参数中包含有可以 throws 的方法的高阶函数中,表示它既可以接受普通函数,也可以接受一个能throw的函数作为参数。
    • 可以将 rethrows 看做 throws 的 “子类”, rethrows 的方法可以用来重载那些被标记为 throws的方法或者参数。或用来满足被标记为 throws 的协议。
    • 如果不知道怎么用 :
      • 记住: 在要 throws 另一个 throws 时,应该将前者 改为 rethrows 。
    • 这样在不失灵活性的同时保证了 代码的 可读性和 准确性。

    相关文章

      网友评论

          本文标题:swift3 错误和异常处理

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