关于返回可选类型的异常抛出函数

Swift异常处理与可选链
本文探讨了Swift中异常处理机制与可选链结合使用时的细节,特别是当异常抛出函数返回可选类型时如何处理。通过具体示例展示了不同情况下的返回类型及如何捕获这些异常。

  大家知道,在可选链(optional chain)里,返回可选类型的可选链返回的仍是可选类型。但是要注意的是,在异常处理里,对于返回类型是可选类型(optional)的异常抛出函数,其返回类型是可选的可选类型。

  非常绕口是不是,对啦~就是这样~2333333333。简单来说,对于下面这个异常抛出函数

func errorTest(by doubleNum: Double) throws -> String? 

使用try?是返回的类型是String??

 

还是看例子。下面这个异常类型和之前一样,异常抛出函数则是之前函数的重载

enum numTest: Int, Error  {

    case _0, _1, _2, _3

    case nothing = 999

 

}

func errorTest(by doubleNum: Double) throws -> String? {

    switch doubleNum {

    case 0 ..< 1:

        throw numTest._0

    case 1 ..< 2:

        throw numTest._1

    case 2 ..< 3:

        throw numTest._2

    case 3 ..< 4:

        throw numTest._3

    case 10 ..< 11:

        throw numTest.nothing

    default:

        if doubleNum > 10000.0 {

            return nil

        }else {

            return "\(doubleNum)"

        }

    }

 

}

 

for d in [2.6, 8.4, 12345.54321] {

    print("即将开始测试")

    if let x = try? errorTest(by: d) {

        print("测试中", terminator: " ")

        print("正常, 测试值 = \(d); 结果 = \(x)")

    }else {

        print("测试中, 异常")

    }

    print("测试结束")

    print("-----------")

 

}

 

运行结果如下:

即将开始测试

测试中, 异常

测试结束

-----------

即将开始测试

测试中 正常, 测试值 = 8.4; 结果 = Optional("8.4")

测试结束

-----------

即将开始测试

测试中 正常, 测试值 = 12345.54321; 结果 = nil

测试结束

-----------

换一个更直观的测试:

for d in [2.6, 8.4, 12345.54321] {

    print("即将开始测试")

    switch try? errorTest(by: d) {

    case let result??:

        print("测试中", terminator: " ")

        print("正常, 测试值 = \(d); 结果 = \(result)")

    case nil?:

        print("测试中", terminator: " ")

        print("正常, 测试值 = \(d); 结果 = nil")

    case nil:

        print("测试中, 异常, 测试值 = \(d)")

    }

    print("测试结束")

    print("-----------")

 

}

 

运行结果如下:

即将开始测试

测试中, 异常, 测试值 = 2.6

测试结束

-----------

即将开始测试

测试中 正常, 测试值 = 8.4; 结果 = 8.4

测试结束

-----------

即将开始测试

测试中 正常, 测试值 = 12345.54321; 结果 = nil

测试结束

 

-----------

 

转载于:https://www.cnblogs.com/lancgg/p/8282079.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值