一、异常的介绍
- 只要我们在编程,就一定要面对错误处理的问题;
- Swift在设计的时候就尽可能让我们明确感知错误,明确处理错误,比如只能使用optional才能处理空值。以下示例代码
//在OC中,error一般都用nil处理,但是在Swift中,需要明确处理error,即throw
[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"] encoding:NSUTF8StringEncoding error:nil];
//Swift中处理异常
do{
var str:String = try String(contentsOf: URL(string: "http://www.baidu.com")!)
}catch{
//隐式参数error
print(error)
}
- 如何描述一个错误:
- 在Swift中,任何一个遵从error protocol的类型,都可以用于描述错误;
- error是一个空的protocol,它唯一的功能,就是告诉Swift编译器,某个类型用来表示一个错误;
- 通常我们使用一个enum来定义各种错误的可能性。
二、异常的示例以及处理
enum Error01:Error{
case Error01NoFile
case Error01NoContent
case Error01ContentNotAvailable
}
//函数抛出异常
func readFile(file:String) throws -> String{
//1.判断文件是否存在
let manager = FileManager.default
if !manager.fileExists(atPath: file) {
print("路径不存在")
throw Error01.Error01NoFile
}
//2.读取文件
var content:String = ""
//2.1.文件内容不可读
do {
try content = String(contentsOfFile: file)
} catch {
//隐式参数
throw Error01.Error01ContentNotAvailable
}
//2.2.文件内容为空
if content.characters.count == 0 {
throw Error01.Error01NoContent
}
//3.取出内容并返回给外界
return content
}
//调用函数
if let file = Bundle.main.path(forResource: "aa.txt", ofType: nil) {
print("------ ---------- ---------- -----")
do {
let content = try readFile(file: file)
print(content)
} catch {
switch error {
// case Error01.Error01NoFile:
// print("没有文件")
case Error01.Error01NoContent:
print("没有内容")
case Error01.Error01ContentNotAvailable:
print("内容不可读")
default:
print("我也不知道")
}
}
}else{
print("没有文件")
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。