我的编程空间,编程开发者的网络收藏夹
学习永远不晚

swift错误处理docatchtrytry!使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

swift错误处理docatchtrytry!使用详解

在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!内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

swift错误处理docatchtrytry!使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

swift错误处理docatchtrytry!使用详解

这篇文章主要介绍了swift错误处理docatchtrytry!使用详解的相关资料,需要的朋友可以参考下
2023-03-19

Combine中错误处理和Scheduler使用详解

这篇文章主要为大家介绍了Combine中错误处理和Scheduler使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-26

swift错误处理do catch try try!使用的方法是什么

这篇“swift错误处理do catch try try!使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sw
2023-07-05

Golang错误处理计划:错误类型分类及处理技巧详解

Golang 错误处理计划:错误类型分类及处理技巧详解引言:错误处理是编程中一个至关重要的方面,它帮助我们在程序出现异常情况时做出及时的响应和处理。在 Golang 中,错误处理被设计成一种可管理和清晰的机制来处理异常。本文将详细探讨
Golang错误处理计划:错误类型分类及处理技巧详解
2024-03-09

Python异常与错误处理详细讲解

这篇文章主要介绍了Python异常与错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-12-22

golang函数中错误处理机制详解

golang 函数中错误处理机制利用 error 类型和 error 标准接口来处理错误。错误类型可自定义,通过 error() 方法返回错误描述。错误处理机制包括显式错误(通过返回值传递错误)和隐式错误(通过 panic 终止函数)。显式
golang函数中错误处理机制详解
2024-05-03

SpringBoot自定义错误处理逻辑详解

这篇文章主要介绍了SpringBoot自定义错误处理逻辑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

如何使用async await处理错误

这篇文章主要介绍“如何使用async await处理错误”,在日常操作中,相信很多人在如何使用async await处理错误问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用async await处理错误
2023-07-02

使用类型断言进行错误处理是错误的吗?

使用类型断言进行错误处理是一种常见的做法,但是否错误取决于具体情况。类型断言可以用于验证传入的参数类型是否符合预期,从而在代码中提前捕获错误。然而,如果错误处理依赖于类型断言而忽略了其他可能的异常情况,则可能会导致问题。因此,在使用类型断言
使用类型断言进行错误处理是错误的吗?
2024-02-10

详解C++中的异常和错误处理机制

在C++编程中,异常处理和错误处理机制是非常重要的,它们可以帮助程序员有效地处理运行时错误和异常情况,本文就来介绍一下C++中的异常处理和错误处理机制吧
2023-05-19

如何使用 PHP 处理异常和错误

php 中异常和错误处理:异常:程序可以恢复的非致命错误,使用 try-catch 结构处理。错误:程序无法恢复的严重错误,使用 error_handler 函数处理。实战案例:捕获 filenotfoundexception 异常并显示友
如何使用 PHP 处理异常和错误
2024-05-01

如何在java中使用HttpClient处理错误

如何在java中使用HttpClient处理错误?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录