`

《从零开始学Swift》学习笔记(Day 55)——使用try?和try!区别

阅读更多

原创文章,欢迎转载。转载请注明:关东升的博客

 

在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢?

1.使用try?

try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。

示例代码如下:

//查询所有数据方法
func findAll() throws -> [Note] {
   
    guard listData.count > 0 else {
        //抛出"没有数据"错误。
        throw DAOError.NoData
    }
    return listData
}
 
let datas  = try? findAll() 
 
print(datas)

 

上述代码中let datas = try? findAll()语句中使用了try?datas是一个可选值,本例中输出nil。使用了try?语句没有必要使用do-catch语句将其包裹起来。

 

2.使用try!

使用try!可以打破错误传播链条。错误抛出后传播给它的调用者,这样就形成了一个传播链条,但有的时候确实不想让错误传播下去,可以使用try!语句。

修改上述代码如下:

//查询所有数据方法
func findAll() throws -> [Note] {
   
    guard listData.count > 0 else {
        //抛出"没有数据"错误。
        throw DAOError.NoData
    }
    return listData
}
 
func printNotes() {
   
    let datas  = try! findAll()       ①
    for note in datas {
        print("date : \(note.date!) - content: \(note.content!)")
    }
}
printNotes()                         ②

 

代码printNotes()函数没有声明抛出错误,在调用它的时候不需要try关键字,错误传播链条在printNotes()函数内被打破了。

代码将try dao.findAll()语句改为try! findAll(),在try后面加了感叹号(!),这样编译器就不会要求printNotes()方法声明抛出错误了,try!打破了错误传播链条,但是如果真的发生错误就出现运行期错误,导致程序的崩溃。

所以使用try!打破错误传播链条时,应该确保程序不会发生错误。

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    从零开始学swift

    从零开始学swift,图灵原创,关东升著。基于swift2.x。2016年3月版

    Swift学习笔记与资料集合

    "Swift学习笔记.docx" 和 "Swift学习笔记.pdf" 可能是由个人开发者或经验丰富的程序员编写的实践总结,通常会包含作者在学习过程中遇到的问题、解决方法和技巧,这对于初学者来说是非常宝贵的实战经验。这些笔记可能...

    OpenStack从零开始学

    《OpenStack从零开始学》是一本面向初学者的指南,旨在帮助读者全面理解并掌握OpenStack这一开源云操作系统的基础知识和实践技能。OpenStack是一个庞大且复杂的项目,由多个组件构成,为云计算提供了基础设施即服务...

    从零学习SwiftUI.zip

    以下是从零开始学习SwiftUI的一些建议: 了解Swift语言基础:SwiftUI是用Swift语言编写的,因此了解Swift语言的基础知识是非常重要的。你可以从苹果官方文档、在线教程或书籍中学习Swift语言。 学习SwiftUI基本概念...

    Swift学习笔记含项目代码.zip

    Swift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习...

    Swift学习笔记

    Swift 学习笔记 Swift 是一种现代化的高性能编程语言,旨在为 iOS、macOS、watchOS 和 tvOS 等苹果平台上的应用程序提供强大的开发能力。本文将总结 Swift 的一些基础知识,包括基本语法、变量声明、数据类型、控制...

    从0开始入门学习Swift

    学习 Swift 需要系统性和持久性,以下是一些建议:首先,了解 Swift 的基础知识。Swift 是一种现代化的高性能语言,由 Apple 公司开发,用于开发 iOS、macOS、watchOS 和 tvOS 应用程序。了解 Swift 的历史、特点和...

    关于新语言swift的?和!知识点

    Swift是一种由Apple开发的编程语言,它在2014年首次发布,旨在提供更安全、更快速的iOS、macOS、watchOS和tvOS应用开发。在Swift中,`?` 和 `!` 是两个非常重要的符号,它们与可选(Optional)类型紧密相关,这是...

    swift学习笔记

    这篇学习笔记主要涵盖了Swift的基础知识和关键特性,旨在帮助初学者理解并掌握这种现代、强大且易读的语言。 一、Swift语言基础 Swift的语法简洁明了,易于理解。它引入了类型推断,使得编写代码时可以减少冗余的...

    swift-贝塞尔曲线使用——模拟心跳曲线

    通过研究和学习这个项目,你可以更直观地理解贝塞尔曲线在Swift中的应用,并且能够将这种技术应用于自己的项目中。 总的来说,Swift中的贝塞尔曲线提供了一种强大的方式来创建动态、流畅的动画效果。通过理解和实践...

    IOS开发-Swift-基础知识学习笔记

    本学习笔记将深入探讨Swift的基础知识,帮助初学者快速掌握这一强大的工具。 一、Swift简介 Swift是由Apple在2014年WWDC(全球开发者大会)上推出的,旨在提高开发效率和代码安全。它吸收了Objective-C的优点,同时...

    iOS开发 swift语言入门 学习资料

    从Apple官方的“Swift Playgrounds”应用到各种在线教程和书籍,如《Swift编程语言》(The Swift Programming Language)官方指南,都提供了详细的学习路径。通过这些资源,你可以逐步了解并掌握变量与常量、控制流...

    Swift中 !和 ?的区别及使用

    Swift中的`!`和`?`是两种不同的可选链操作符,它们与Swift的可选类型(Optional)紧密相关。可选类型是Swift中处理值可能缺失的一种机制,用以确保安全地访问可能未初始化或为`nil`的变量。 1. **可选类型...

    整理好的swift学习资源和笔记.zip

    目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常...

    Swift编程入门教程.pdf

    Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零...

    swift 学习笔记 之 下标脚本的使用

    这篇学习笔记将深入探讨Swift下标脚本的使用,帮助你更好地理解和应用这一特性。 一、定义下标 在Swift中,你可以为自定义类型定义下标,以支持通过特定索引来访问和修改其内部数据。定义下标的关键字是`subscript`...

    BBCo - iOS开发入门教程 SwiftUI 微博App项目实战 零基础学习Swift编程.zip

    本教程旨在帮助初学者从零开始学习Swift编程,并通过实战微博App的项目开发,掌握iOS应用的基本构建过程。 一、Swift语言基础 Swift是Apple为iOS、iPadOS、macOS、watchOS和tvOS开发的开源编程语言。它的设计目标是...

    swift-stringscsv文件解析转换

    在Swift编程语言中,处理字符串和CSV(逗号分隔值)文件是常见的任务,特别是在数据导入导出、数据分析和文件交互场景。本教程将深入探讨如何使用Swift进行字符串与CSV文件之间的解析和转换。 首先,`swift-strings...

Global site tag (gtag.js) - Google Analytics