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
网友评论