美文网首页
Swift3.x - 错误处理

Swift3.x - 错误处理

作者: ibabyblue | 来源:发表于2017-03-28 15:10 被阅读190次

Swift异常
错误处理:是响应错误以及从错误中恢复的过程。Swift提供了在运行时对可恢复错误的抛出、捕获、传递和操作等支持!


throwing函数
表示一个函数、方法和构造器可以抛出错误,在函数声明的参数列表之后加上throws关键字。一个标有throws关键字的函数被称作throwing函数。如果此函数指明了返回值类型。throws关键要写在->之前。
throwing函数格式如下:

func throwErrors() throws {
  
}

func willThrowErrors() throws -> String{

}

注:Swift中的错误处理并不涉及接触调用栈,这是个计算代价高昂的过程,因此throw语句的性能特性可以和return语句相媲美!

Swift处理异常的方式

Swift中提供了三种处理异常的方式:

  • 方式一:try方式
    手动捕获异常,do-catch方式
    • do-catch语句:使用时可以存在多条catch匹配语句!

    • 格式:

        do{
          //try 语句
        }catch pattern{
          //执行匹配语句对应的错误处理逻辑
        }
      
    • 使用示例

      /**加载本地json文件*/
      //1.获取json文件路径
        guard let jsonPath = Bundle.main.path(forResource: "Settings.json", ofType: nil) else {
            print("无法获取json文件路径")
            return
        }
        //2.读取json文件的内容
        guard let jsonData = NSData(contentsOfFile: jsonPath) else {
            print("无法获取jsonData数据")
            return
        }
        
        //3.将jsonData转换成数组
        do {
            try JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers)
        } catch {
            //处理错误的逻辑
        }
      
      

      catch多匹配语句的形式如下,Swift官方的例子:

        let fileManager = FileManager.default
        let fromURL = URL(fileURLWithPath: "/path/to/old")
        let toURL = URL(fileURLWithPath: "/path/to/new")
        do {
            try fileManager.moveItem(at: fromURL, to: toURL)
        } catch CocoaError.fileNoSuchFile {
            print("Error: no such file exists")
        } catch CocoaError.fileReadUnsupportedScheme {
            print("Error: unsupported scheme (should be 'file://')")
        }
      
  • 方式二:try?方式(常用方式)
    系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil,如果该方法为出现异常,则返回对应对象!
    • 使用示例:
        //使用guard校验对象是否存在
        guard let anyObject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else{
            print("无法获取anyObject")
            return
        }
      
  • 方式三:try!方式
    断言此方法不会出现异常!但是此种处理方式很危险,如果出现了异常,程序会crash!(类似于强制解包,不建议使用)
    • 使用示例
      let anyObject = try! JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers)
    

Zeb
学习地址:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10
https://github.com/numbbbbb/the-swift-programming-language-in-chinese

相关文章

网友评论

      本文标题:Swift3.x - 错误处理

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