• Swift try try! try?使用和区别


    Swift try try! try?使用和区别


    一、异常处理try catch的使用

    1. swift异常处理 历史由来

    • Swift1.0版本 Cocoa Touch 的 NSError ,Swift并没有真正的具备自己的异常处理机制
    • Swift2.0版本 加入 ErrorType protocol
    • Swift3.0版本 改名 Error protocol

    2. Swift3.0 Error protocol 的使用

    首先定义一个枚举,集成协议Error (Swift 2.0 的协议叫做ErrorType,3.0后协议改名Error)

    enum MyError : Error {
        case one
        case two
        case three
    }
    

    3. throws和throw的使用

    使用throws放在参数列表后面标明一个方法有异常抛出,标准格式 : func 方法名字 (参数列表) throws -> 返回值类型 并在方法内使用throw抛出异常

    func testFunc(str: String) throws -> String  {
    
        if str == "one" {
            throw MyError.one
        }else if str == "two" {
            throw MyError.two
        }else if str == "three" {
            throw MyError.three
        }
    
        return "ok"
    }
    

    4. 使用do-catch处理异常

    do {
        var str = try testFunc(str: "three")
    } catch MyError.one {
        print("MyError.one")
    } catch MyError.two {
        print("MyError.two")
    } catch let error as MyError {
        print(error)
    }
    

    二、try?的使用

    Swift2.0 后加入了新的关键字 try? , 如果不想处理异常那么可以用这个关键字,使用这个关键字返回一个可选值类型,如果有异常出现,返回nil.如果没有异常,则返回可选值.例子如下

    enum MyError : Error {
        case one
        case two
        case three
    }
    
    func testFunc(str: String) throws -> String  {
    
        if str == "one" {
            throw MyError.one
        }else if str == "two" {
            throw MyError.two
        }else if str == "three" {
            throw MyError.three
        }
    
        return "ok"
    }
    
    var str = try? testFunc(str: "three")
    print(str)
    

    控制台输出

    nil
    Program ended with exit code: 0
    

    三、try!的使用

    如果不想处理异常,而且不想让异常继续传播下去,可以使用try!.这有点儿类似NSAssert().但是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会立刻停止.例子如下

    enum MyError : Error {
        case one
        case two
        case three
    }
    
    func testFunc(str: String) throws -> String  {
    
        if str == "one" {
            throw MyError.one
        }else if str == "two" {
            throw MyError.two
        }else if str == "three" {
            throw MyError.three
        }
    
        return "ok"
    }
    
    var str = try! testFunc(str: "three")
    

    控制台:程序奔溃掉~


    四、try try? try! 的区别

    • try 出现异常处理异常
    • try? 不处理异常,返回一个可选值类型,出现异常返回nil
    • try! 不让异常继续传播,一旦出现异常程序停止,类似NSAssert()
    Do you want to spend the rest of your life selling sugared water or do you want a chance to change the world?
  • 相关阅读:
    SpringBoot-整合Shiro和JWT时关于JWT部分的内容
    springboot常用注解分类整理
    ubuntu18.04 安装tomcat9
    Ubuntu 18.04 安装Tomcat9 遇到的问题Tomcat9 Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
    Ubuntu 18.04 上安装水下网络仿真器Aqua-Sim NG
    用gorm向mysql插入的时间数据和实际时间不一致问题
    Ubuntu18.04上安装NS-3
    Java集合用法
    Spring Boot 自动装配原理
    深入理解select、poll和epoll及区别
  • 原文地址:https://www.cnblogs.com/Erma-king/p/6755969.html
Copyright © 2020-2023  润新知