Swift 中 throws 异常抛出

一.异常抛出关键 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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值