• swift之异常处理


    官网地址:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42-ID508

    1、定义枚举异常值

    我们可以定义自己的异常枚举值,要遵循Error协议,Error协议是空的,不用实现任何东西。例如:

    enum VendingMachineError: Error {
        case invalidSelection
        case insufficientFunds(coinsNeeded: Int)
        case outOfStock
    }

    2、定义抛出异常的方法

    要定义抛出异常的方法,只需要在返回值的->前面加上throw就好了,例如:

    func canThrowErrors() throws -> String

    3、捕获异常

    swift捕获异常有三种方法:

    try方式 手动捕获异常

    func test()->Void{
        do{
            print(1)
            let data = Data()
            try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
            //会被阻断
            print("2")
        }catch{
            print(error)
        }
        print("3")
    }

    try?方式(常用)系统帮助我们处理异常,如果该方法出现异常,则该方法返回nil。如果没有异常,则返回对应的对象

    func test()->Void{
        print("1")
        let data = Data()
        guard (try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)) != nil else {
            print("2")
            return
        }
        print("3")
    }

    try!方法(不建议,非常危险)直接告诉系统,该方法没有异常。注意:如果该方法出现了异常,那么程序会报错

    func test()->Void{
        print("1")
        let data = Data()
        let result = try! JSONSerialization.jsonObject(with: data, options: .mutableContainers)
        print("3")
    }

    4、guard用法

    与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。下面两段代码是等价的:

    func fooBinding(x: Int?) {
        if let x = x where x > 0 {
            // 使用x
            x.description
        }
    
        // 如果值不符合条件判断,就执行下面的代码
    }
    func fooGuard(x: Int?) {
        guard let x = x where x > 0 else {
            // 变量不符合条件判断时,执行下面代码
            return
        }
    
        // 使用x
        x.description
    }
  • 相关阅读:
    Flink-v1.12官方网站翻译-P029-User-Defined Functions
    Flink-v1.12官方网站翻译-P028-Custom Serialization for Managed State
    Flink-v1.12官方网站翻译-P027-State Schema Evolution
    Flink-v1.12官方网站翻译-P026-State Backends
    Flink-v1.12官方网站翻译-P025-Queryable State Beta
    Flink-v1.12官方网站翻译-P024-Checkpointing
    Flink-v1.12官方网站翻译-P023-The Broadcast State Pattern
    Flink-v1.12官方网站翻译-P022-Working with State
    java笔记五——数组
    java笔记四——java基础知识(二)
  • 原文地址:https://www.cnblogs.com/yongbufangqi1988/p/7406545.html
Copyright © 2020-2023  润新知