美文网首页
19-Swift中函数抛出异常以及异常的处理

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

作者: magic_pill | 来源:发表于2017-04-08 11:15 被阅读37次

一、异常的介绍

  • 只要我们在编程,就一定要面对错误处理的问题;
  • 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("没有文件")
}

相关文章

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

    一、异常的介绍 只要我们在编程,就一定要面对错误处理的问题; Swift在设计的时候就尽可能让我们明确感知错误,明...

  • 学习笔记8-异常处理

    异常处理 使用try和catch处理异常 抛出异常 通过throw关键字来抛出异常,执行到throw语句后,函数会...

  • C++异常处理

    C++ 异常处理,根据抛出的异常数据类型,进入到相应的catch块中 throw 抛出函数外 抛出异常对象 thr...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • [转]构造函数、析构函数抛出异常的问题

    构造函数、析构函数抛出异常的问题 抛出异常1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用...

  • Kotlin | 2.Kotlin基础

    声明函数、变量、类、枚举以及类型Kotlin中的控制结构智能转换抛出和处理异常 函数学习 函数和变量 函数 变量 ...

  • 03/13牛客刷题总结

    1.java中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。 throw用于抛出异常 throws...

  • (五)C++中的异常处理与模板类

    C++中的异常处理与模板类 一、C++ 中的异常处理 1、异常处理 在C++ 中可以抛出任何类型的异常,根据抛出的...

  • nestjs中间件、异常过滤器、管道、守卫、拦截器区别

    /** * 中间件:是在路由处理程序之前调用的函数 * 异常过滤器:处理整个程序中的所有抛出异常 * 管道: * ...

  • 异常捕获

    自动抛出异常:abort(状态码) 捕获异常处理:errorhandler(状态码),定义的函数中要包含一个参数,...

网友评论

      本文标题:19-Swift中函数抛出异常以及异常的处理

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