19-Swift中函数抛出异常以及异常的处理

一、异常的介绍

  • 只要我们在编程,就一定要面对错误处理的问题;
  • 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("没有文件")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,536评论 3 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [APPVENTUR...
    guoshengboy阅读 7,384评论 0 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 周五下班早早收拾,驾车1个半小时就到家了。半路上女儿就发微信问爸爸到哪了,啥时候回来呀,回到家就看到女儿早早的在房...
    风过无痕ing阅读 2,286评论 0 0