美文网首页
[Swift] 一段代码汇总异常处理8条Tip

[Swift] 一段代码汇总异常处理8条Tip

作者: 无衔 | 来源:发表于2018-12-26 13:02 被阅读0次

以下要点,有在代码对应的注释编号。

1.方法上增加throws,会影响方法签名,如果该方法是实现接口的,throws会使得它不满足接口
2.方法内含有throw语句,必须在声明上加throws
3.不写最后通用的catch会认为错误没有处理完毕,还是需要在在方法声明上加throws
4:异常定义枚举项可以含有参数,并指定参数名
5.显而易见:异常发生之后的代码不会被执行
6.同理,哪怕是defer块,写在异常之后也不会被执行
7.defer块相当于java的finally块,但是得在异常发生之前写,触发时机是当前{}代码块被跳出时执行
8.方法内部没有异常也可以声明上加throws,但是调用它的地方就要try or try? or try!

protocol StudySubject {
    func runTest()
}
//定义一个错误类枚举
enum TestErr:Error {
    case OneErr
    case TwoErr(String)
    case ThreeErr(msg:String,code:Int)//###4:可以含有参数,并指定参数名
}
class Cat001A_Basic : StudySubject {
    
    //###2:含有throw语句,必须在函数声明上加throws
    func testErr() throws -> Int {
        throw TestErr.ThreeErr(msg:"mock error", code: 100)
    }
    
    func showMsg(_ msg:String) throws { //###8:可以强行加throws 但是调用的地方就要try or try? or try!
        print(msg)
    }
    
    //###1:写做 func runTest() throws 会认为没有实现接口,所以throws会影响接口实现
    func runTest() {
        do {
            defer{
                try! showMsg("延迟打印-会执行到")//###7:在defer块中相当于finally块,但是得在异常发生之前写,触发时机是当前{}代码块被跳出时执行
            }
            print("do-catch 错误捕获")
            try testErr()
            print("未捕获错误") //###5:这行不会被执行
            defer{
                print("延迟打印-不会执行到")//###6:defer写在异常之后不会被执行
            }
        } catch  TestErr.OneErr {
            print("Error@One")
        } catch TestErr.TwoErr {
            print("Error@Two")
        } catch TestErr.ThreeErr(let errObj){
            print(type(of:errObj) )
            print("Error@Three" + "," + errObj.msg + "," + String(errObj.code))
        }
        //###3:不写最后这个catch会认为错误没有处理完毕,还是需要在在方法声明上加throws,
        //当然这样做也不行,违反了###2
        catch{
            print("Error@Other")
        }
    }
}

相关文章

  • [Swift] 一段代码汇总异常处理8条Tip

    以下要点,有在代码对应的注释编号。 1.方法上增加throws,会影响方法签名,如果该方法是实现接口的,throw...

  • iOS swift do-try-catch 语法学习

    iOS swift do-try-catch 处理异常的3种方式 代码如下: 第一种 手动捕获异常 do{ // ...

  • 6.3-全栈Java笔记:异常处理方法(上)

    异常的处理办法之一 捕获异常 图1异常处理 上面过程详细解析: 1.try块: try语句指定了一段代码,该段代码...

  • swift异常处理

    swift像其他编程语言一样可以抛出异常并处理异常,本文就详细说一下在swift中抛出并处理异常,swift中的一...

  • Swift-异常处理四种方式

    跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处理的能...

  • SQLite.swift的使用

    知识储备:swift中异常处理 SQLite.swift这个库中有很多的异常处理,详细了解请点击下面的地址: Sw...

  • Swift - 异常处理

    说明 跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处...

  • Swift备忘

    Swift初体验 Swift Tips Swift三种不同的【异常处理方式】 Swift 3.0 private变...

  • Swift 处理异常

    处理方式 定义异常类型 在 Swift 中,错误用符合Error协议的类型的值来表示。这个空协议表明该类型可以用于...

  • swift——异常处理

    FileManager.swift ViewController.swift

网友评论

      本文标题:[Swift] 一段代码汇总异常处理8条Tip

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