swift 错误处理do catch try try!使用详解

 更新时间:2023年03月16日 08:15:11   作者:mp624183768  
这篇文章主要介绍了swift 错误处理do catch try try!使用详解的相关资料,需要的朋友可以参考下

在swift中 如果我们要定义一个表示错误类型非常简单,只要遵循Error协议就可以了,我们通常用枚举或者结构体来表示错误类型,枚举可能用的多些,因为他能更直观的表达当前错误类型的每种错误细节。

//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright © 2020 liuan. All rights reserved.
//

import Foundation
enum VendingMachingError:Error{
    case invalideSelection
    case insufficientFunds(coinsNeeded:Int)
    case outOfStock
}

函数、方法和初始化器都可以抛出错误。需要在参数列表后面,返回值加throws 关键字。

简化版

func canThrowErrors() throws -> String
//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright © 2020 liuan. All rights reserved.
//

import Foundation
enum VendingMachingError:Error{
    case invalideSelection
    case insufficientFunds(coinsNeeded:Int)
    case outOfStock
}
struct Item {
    var price: Int
    var count: Int
}

class VendingMathine{
    var inventory=[
        "Candy bar":Item(price: 12, count: 7),
        "Chips":Item(price: 10, count: 4),
        "Pretzels":Item(price: 7, count: 11),
    ]
    
    var coinsDeposited = 0
    func vend(itemNaamed name:String) throws{
        guard let item = inventory[name] else{
            throw VendingMachingError.invalideSelection
        }
        
        guard item.count > 0 else{
            throw VendingMachingError.outOfStock
        }
        guard item.price <= coinsDeposited else{
            throw VendingMachingError.insufficientFunds(coinsNeeded: item.price - coinsDeposited)
             }
        
        coinsDeposited -= item.price
        var newItem = item
        newItem.count -= 1
        inventory[name]=newItem
        print("Dispensing \(name)")
        
    }
}


let vm=VendingMathine()

vm.coinsDeposited=2
try vm.vend(itemNaamed: "Pretzels")

抛出异常

Playground execution terminated: An error was thrown and was not caught:
▿ VendingMachingError
  ▿ insufficientFunds : 1 element
    - coinsNeeded : 5

在Swift中我们使用do-catch块对错误进行捕获,当我们在调用一个throws声名的函数或方法时,我们必须把调用语句放在do语句块中,同时do语句块后面紧接着使用catch语句块

swift 错误处理do catch try try! defer_ci

do里面执行调用语句

后面跟着catch 第一种错误 在第一种错误里面做处理

第二种错误需要符合一定的条件

然后做错误处理

第三种是没有捕获到的错误 然后在第三个语句里面做处理

swift 错误处理do catch try try! defer_ide_02

如果你确信一个函数或者方法不会抛出错误,可以使用try! 来中断错误的传播,但是如果错误真的发生了。你会得到一个运行时错误

//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright © 2020 liuan. All rights reserved.
//

import Foundation
let photo = try! 5/0
warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression
let photo = try! 5/0
                  ^

warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression
let photo = try! 5/0
                  ^

error: BlackMyPlayground.playground:10:19: error: division by zero
let photo = try! 5/0
                  ^

defer关键字:defer block 例的代码会在函数return之前执行,无论函数是从哪个分之return的,还有throw,还是自然而然走到最后一样。

//
//  File.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright © 2020 liuan. All rights reserved.
//

import Foundation

func processFile(fileName: String)throws{
    defer{
        print("JIESHU")
    }
   print("KAISHI ")
 
}

到此这篇关于swift 错误处理do catch try try!使用详解的文章就介绍到这了,更多相关swift 错误处理do catch try try!内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Swift实现多个TableView侧滑与切换效果

    Swift实现多个TableView侧滑与切换效果

    这篇文章主要为大家详细介绍了Swift实现多个TableView侧滑与切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Swift Extension扩展得使用详细介绍

    Swift Extension扩展得使用详细介绍

    在swift中,extension与Objective-C的category有点类似,但是extension比起category来说更加强大和灵活,它不仅可以扩展某种类型或结构体的方法,同时它还可以与protocol等结合使用,编写出更加灵活和强大的代码
    2022-09-09
  • Swift Json实例详细解析

    Swift Json实例详细解析

    这篇文章主要给大家介绍了关于Swift Json解析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • Swift中用到extension的一些基本的扩展功能讲解

    Swift中用到extension的一些基本的扩展功能讲解

    这篇文章主要介绍了Swift的一些基本的扩展功能,即extension关键字的使用,需要的朋友可以参考下
    2015-11-11
  • 在Swift中使用Cocoa的现有设计模式介绍

    在Swift中使用Cocoa的现有设计模式介绍

    这篇文章主要介绍了在Swift中使用Cocoa的现有设计模式介绍,Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一,需要的朋友可以参考下
    2014-07-07
  • swift3.0指纹解锁的实现方法

    swift3.0指纹解锁的实现方法

    这篇文章主要为大家详细介绍了swift3.0指纹解锁的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Swift教程之函数详解

    Swift教程之函数详解

    这篇文章主要介绍了Swift教程之函数详解,本文讲解了函数的声明与调用、函数的参数和返回值、函数参数名、函数类型等内容,需要的朋友可以参考下
    2015-01-01
  • swift闭包和OC block类型的使用

    swift闭包和OC block类型的使用

    这篇文章主要介绍了swift闭包和OC block类型的使用,需要的朋友可以参考下
    2017-08-08
  • Swift中的可选项Optional解包方式实现原理

    Swift中的可选项Optional解包方式实现原理

    这篇文章主要为大家介绍了Swift中的可选项Optional解包方式实现原理示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Swift代码自定义UIView实现示例

    Swift代码自定义UIView实现示例

    这篇文章主要为大家介绍了Swift如何自定义UIView的实现示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步,早日升职加薪
    2021-10-10

最新评论