一.异常抛出关键 throws 定义在函数结尾 如果函数有返回值 定义在 返回类型前如 :

func throwDeliver(num:Int) throws ->String

二.定义方法

//错误传递
    @discardableResult
    func throwDeliver(num:Int) throws ->String {
        print("错误传递")
        try numberTest(num: num)
        print("未传递错误")
        return "无错误"
    }
    func numberTest(num:Int) throws{
        if num == 1 {
            print("成功")
        }else if num == 2 {
            throw OperationError.ErrorTwo
        }else if num == 3{
            throw OperationError.ErrorThree("失败")
        }else {
            throw OperationError.ErrorOther
        }

}

三、使用

1. 禁止异常传递,只有当你确定这个语句不会抛出异常你才可以这么做否则会引发运行时错误

print(try? throwDeliver(num: 1)+":禁止错误传递")

错误传递
成功
未传递错误
Optional("无错误:禁止错误传递")

print(try? throwDeliver(num: 5)+":禁止错误传递")

错误传递
nil

在执行到

print("错误传递")

try numberTest(num: num) 抛出异常 后续代码不在走下去

2.将异常转换成可选值,如果一个语句会抛出异常那么它将返回nil无论这个语句本来的返回值是什么:

if let retureMessage = try? throwDeliver(num: 1) {
            print("可选值非空:"+retureMessage)

}

错误传递
成功
未传递错误
可选值非空:无错误 

if let retureMessage = try? throwDeliver(num: 5) {
            print("可选值非空:"+retureMessage)

}

错误传递 

3.使用do-catch捕获处理异常,在do闭包里面执行会抛出异常的代码,在catch 分支里面匹配异常处理异常

do {
            print("do-catch 错误捕获")
            try throwDeliver(num: 1)
            print("未捕获错误")
        } catch  OperationError.ErrorOne {
            print("ErrorOne:")
        } catch OperationError.ErrorTwo {
            print("ErrorTwo:")
        } catch OperationError.ErrorThree(let discription) {
            print("ErrorThree:"+discription)
        }catch let discription{
            print(discription)
        }

do-catch 错误捕获
错误传递
成功
未传递错误
未捕获错误

do {
            print("do-catch 错误捕获")
            try throwDeliver(num: 5)
            print("未捕获错误")
        } catch  OperationError.ErrorOne {
            print("ErrorOne:")
        } catch OperationError.ErrorTwo {
            print("ErrorTwo:")
        } catch OperationError.ErrorThree(let discription) {
            print("ErrorThree:"+discription)
        }catch let discription{
            print(discription)

}

do-catch 错误捕获
错误传递
ErrorOther

也可以在 catch 后不加 条件选择 直接输出 系统抛出的错误信息

do {
            try throwDeliver(num: 3)
            print("未捕获错误")
        } catch
        {
            print(error)

}

错误传递
ErrorOther

Swift 中 throws 异常抛出相关推荐

  1. JUnit中测试异常抛出的方法

    最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...

  2. 如何合理使用java异常_如何更合理的利用Java中的异常抛出?

    得编程语言中最让人不解的部分就是它能够创建错误.当时对Java语言中的throw关键字的第一反应就是"啊,这也太傻了,为什么我们想要引发一个错误(error)?"我觉得错误是我的敌 ...

  3. 别拦我,我要撞豆腐 ----- for循环中进行异常抛出,for循环还能继续循环吗?

    今天在做一个登录逻辑判断的时候,在一个for循环里,抛出了一个自定义异常,然后for循环就直接被跳出了--???这是我没想到的地方,我忍不了,死活就要让for循环继续执行下去.于是再我死钻牛角尖两个多 ...

  4. java java 检查型异常_如何整合Java中的有效性检查和异常抛出?

    我正在实现一个接口,该接口定义了一种方法,如果参数无效,该方法可以引发异常.有效参数的构成取决于实现类.该接口还定义了一个isValid()方法,该方法可用于检查参数,但返回布尔值而不是引发异常.我发 ...

  5. java的异常抛出throws和throw的简单使用

    java的异常抛出throws和throw的简单使用 参考文章: (1)java的异常抛出throws和throw的简单使用 (2)https://www.cnblogs.com/Anxc/p/113 ...

  6. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

  7. Java:异常的概念及分类、异常的处理、异常抛出及自定义异常

    异常概念 异常分类   Java异常处理机制 try ...catch...finally throw和throws 自定义异常 一.异常的概念         什么是异常?             ...

  8. Spring-AOP 通过配置文件实现 异常抛出增强

    概述 实例 概述 异常抛出增强表示在目标方法抛出异常后实施增强,最适合的场景是事务管理,比如当参与事事务的方法抛出异常后需要回滚事务. 异常抛出增强类需要实现ThrowsAdvice接口,Throws ...

  9. java 捕捉的异常抛出_Java异常抛出和捕获

    Java中把非正常情况分为两种,异常(Exception)和错误(Error). 异常.png Error:一般是指与虚拟机相关的问题(虚拟机错误.线程死锁等),这种错误无法回复或不可能捕获 Exce ...

最新文章

  1. 俞敏洪:创业者应该避开的10个坑
  2. 基于HTML5的3D网络拓扑树呈现
  3. oracle tns连接拒绝,TNS-12564: TNS: 拒绝连接(new)
  4. IIS发布ASP.NET应用常见错误及解决办法
  5. 【学习笔记】系统观核心管理理论
  6. 02、Kubernetes 入门(上)-重新认识Docker
  7. [转]总结使用Unity 3D优化游戏运行性能的经验
  8. 数据库框架的log4j日志配置
  9. flask echarts词云可视化_基于flask框架的高校舆情分析系统
  10. 用PHP去掉文件头的Unicode签名(BOM)
  11. sql查询结果集根据指定条件排序的方法
  12. 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
  13. 猿创征文|网络安全的十大经典工具介绍
  14. 苹果cms v10官网源码下载
  15. PC 和开发板之间传输文件
  16. 学习ectouch之文件结构
  17. Red5服务器搭建,流媒体rtmp推流实现H5在线直播以及遇到的坑
  18. 基于 DirectShow 实现 SourceFilter 常见问题分析
  19. 【cocos2d游戏开发实战】一款射击类小游戏《Zombie Age》的开发(一)
  20. nodejs ---- 起步

热门文章

  1. c语言保留n位有效数字问题
  2. 网页被http://runonce.msn.com/runonce3.aspx锁定
  3. C++中的逗号表达式
  4. 无线网卡无法获取dhcp服务器,无线网卡无法获得IP地址
  5. 基于java的音乐歌曲网站设计与实现-源码
  6. 码隆科技获软银中国2.2亿元B轮融资,要做垂直行业标准化的商品识别
  7. 2021年ML和NLP学术统计:谷歌断层第一,强化学习大牛Sergey Levine位居榜首
  8. 华为官微 鸿蒙,真的来了!华为鸿蒙系统开通官微,EMUI将全面升级你期待吗?...
  9. mysql的max_allowed_packet过小的问题
  10. 报考建行考计算机专业知识资料,建设银行考试都考什么