`

《从零开始学Swift》学习笔记(Day 53)——do-try-catch错误处理模式

阅读更多

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

 

Swift 1.x的错误处理模式存在很多弊端,例如:为了在编程时候省事,给error参数传递一个nil,或者方法调用完成后不去判断error是否为nil,不进行错误处理。

let contents = NSString(contentsOfFile: filePath,
        Êencoding: NSUTF8StringEncoding, error: nil)//error参数传递一个nil

 

或者

var err: NSError?   
let contents = NSString(contentsOfFile: filePath,
        Êencoding: NSUTF8StringEncoding, error: &err)

 

不好的编程习惯,由于Objective-CSwift 1.x没有强制处理机制,因此一旦真的发生错误,程序就会发生崩溃。

同样的从文件中读取字符串示例,如果使用Swift 2错误处理模式代码如下:

import Foundation
 
do {        //要做一些操作
    let str = try NSString(contentsOfFile: filePath,
                             Êencoding: NSUTF8StringEncoding)    //要尝试做的事情
} catch let err as NSError { //如果失败则进入catch代码块
    err.description
}

 

do-try-catch这种错误模式与Java中异常处理机制非常类似,本意就是尝试(try)做一件事情,如果失败则捕获(catch)处理。

 

捕获错误

完整的do-try-catch错误处理模式的语法如下:

 

do {
    try 语句
  成功处理语句组
} catch 匹配错误{
    错误处理语句组
}
在try 语句

 中可以产生错误,当然也可能不会产生错误,如果有错误发生,catch就会处理错误。catch代码块可以有多个,错误由哪个catch代码块处理是由catch后面的错误匹配与否而定的。错误类型的多少就决定了catch可以有多少。我们先介绍一下错误类型。

 

错误类型

Swift中错误类型必须遵从ErrorType 协议,其次考虑到错误类型的匹配,它应该被设计成为枚举类型,枚举类型非常适合将一组相关值关联起来。

如果我们编写访问数据库表程序,实现对表数据插入、删除、修改和查询等操作,我们会需要类似如下代码的错误类型:

enum DAOError: ErrorType {
    case NoData
    case PrimaryKeyNull
}

 

NoData表示没有数据情况,PrimaryKeyNull表示表的主键(Primary Key)为空情况。

那么我们就可以通过如下代码捕获错误。

do { 
    //try 访问数据表函数或方法
} catch DAOError.NoData {
    print("没有数据。")
} catch DAOError.PrimaryKeyNull {
    print("主键为空。")
}
 

 

 

 

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

相关推荐

    swift-?Swiftdo-try-catch的语法糖衣

    在处理可能抛出错误的操作时,Swift提供了一种优雅的异常处理机制,即`do-try-catch`结构。这个结构使得开发者能够以一种清晰、可读的方式来捕获和处理潜在的错误。 `do`块是`do-try-catch`结构的起点,它包含可能...

    从零开始学swift

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

    iOS实例开发源码——jsz-Mega-Fill-Up-cfde55c.zip

    可能还包括错误处理机制,如使用do-catch来捕获并处理异常。同时,单元测试和集成测试的代码也是项目质量保证的重要部分,可能包含TestFlight或XCTest的相关代码。 为了构建和运行这个项目,我们需要Xcode IDE,它...

    IOS应用源码——nluchkin-Sosial-Blocks-497fe69.zip

    源码标签表明我们能够深入了解应用的内部工作原理,学习和借鉴其设计模式、架构以及处理特定问题的方法。 【压缩包子文件的文件名称列表】"nluchkin-Sosial-Blocks-497fe69"没有提供具体的文件列表,但通常一个iOS...

    IOS应用源码——qtechnologycompany-OrbitPad-323cb53.rar

    【描述】描述中的 "IOS应用源码——qtechnologycompany-OrbitPad-323cb53.rar" 同样强调了这是针对iOS平台的源代码,意味着我们可以深入研究其背后的编程语言(通常是Objective-C或Swift)、设计模式以及与iOS平台...

    iOS实例开发源码——drewish-munchem-8f7f405.zip

    - **错误处理**:使用do-catch块处理Swift中的错误。 - **单元测试和持续集成**:使用Xcode内置的测试框架和Jenkins等CI工具。 通过分析和学习这个项目,开发者可以提升自己的iOS编程技能,理解实际项目中的最佳...

    IOS应用源码——unixpickle-Giraffe-2e5d3f5.rar

    7. **错误处理和日志记录**: 学习如何有效地处理异常和记录应用日志。 8. **自动化构建和持续集成**: 如果包含Fastlane或其他CI/CD工具的配置,可以了解如何自动打包和部署应用。 总之,"IOS应用源码——unixpickle...

    IOS应用源码——Sveder-FIAR-0943e7d.rar

    10. **错误处理**:学习如何使用`try-catch`语句或`NSError`来处理可能出现的问题。 通过这个源码包,你可以深入了解iOS开发的各个方面,提升你的编程技巧,并可能发现新的编程理念和技术。同时,这也为你提供了...

    iOS实例开发源码——jacksinn-simon-442e226.zip

    总的来说,"iOS实例开发源码——jacksinn-simon-442e226.zip"为我们提供了一个宝贵的iOS开发学习资源,涵盖了从基础语法到高级技术的诸多方面,是iOS开发者成长道路上的重要参考资料。通过深入研究这个项目,无论是...

    IOS应用源码——torrez-MatchGame-619986c.rar

    对于iOS开发者来说,研究这样的源码可以帮助他们学习Swift或Objective-C(iOS应用开发的两种主要编程语言),了解iOS应用的设计模式,以及如何利用Apple的UIKit框架构建用户界面和处理事件。 在【压缩包子文件的...

    IOS应用源码——slashingweapon-Pulp-Dossier-20f42b0.rar

    开发者通常会通过`AppDelegate.swift`或`AppDelegate.m`文件来初始化应用,`Main.storyboard`或`ViewController.swift`/`ViewController.m`处理主界面,而`ViewController`和其他`Controller`类负责处理用户交互和...

    iOS实例开发源码——jshmrsn-Above---Beyond-Air-Combat-416b529.zip

    总之,通过研究这个源代码,开发者不仅可以学习到iOS应用的基本结构和Swift编程技巧,还可以了解到游戏开发中的图形渲染、物理模拟、音频处理、网络通信等多个领域的技术细节。这对于提升iOS开发技能,特别是游戏...

    IOS应用源码——radex-Yaspeg-old-4966037.rar

    通过研究这个源代码,开发者可以学习到iOS应用的开发流程,包括UI设计、网络请求、数据存储、动画效果、多线程处理、错误处理等知识点。同时,对于有经验的开发者来说,这是一个检查代码质量、优化性能或复用代码的...

    iOS游戏应用源代码——clawoo-Hangman-f89ebe8.zip

    9. **错误处理**:Swift支持强大的错误处理机制,源代码中可能会有try-catch结构来捕获和处理可能出现的异常情况。 10. **Xcode集成开发环境**:开发者可能使用Xcode进行项目构建、调试和测试,Xcode的使用技巧,如...

    iOS游戏应用源代码——pppoe-SnakeRPG-53c5c39.zip

    《iOS游戏应用源代码分析——基于pppoe-SnakeRPG-53c5c39.zip》 本文将深入探讨iOS游戏开发中的一个重要案例——pppoe-SnakeRPG项目,该项目的源代码位于提供的zip压缩包内。通过对源代码的解析,我们可以学习到iOS...

    iOS实例开发源码——JayDugger-Eclipse-Phase-Mind-Maps-5fa3a53.zip

    《iOS实例开发源码——JayDugger-Eclipse-Phase-Mind-Maps-5fa3a53》 这个压缩包文件"JayDugger-Eclipse-Phase-Mind-Maps-5fa3a53.zip"是针对iOS平台的一个实例开发项目,由开发者JayDugger创建。该资源包含了一组...

    IOS应用源码——omz-AppSales-Mobile-0f83b4a.zip

    5. **错误处理**:任何应用都可能遇到错误,源码中应该包含了错误处理机制,例如使用Swift的do-catch语句来捕获并处理异常。 6. **测试与调试**:良好的测试实践也是优秀源码的一部分。项目可能包含了单元测试和...

    IOS应用源码——sroske-launch-it-cba4f99.rar

    【标题】"IOS应用源码——sroske-launch-it-cba4f99.rar" 提供的是一款基于iOS平台的应用程序源代码,其中包含了开发者在创建iOS应用时使用的全部源文件。这个压缩包可能是一个开源项目,或者是一个教学示例,用于...

    iOS实例开发源码——gooddoug-Cravenstar-16d97a2.zip

    《iOS实例开发源码——gooddoug-Cravenstar-16d97a2.zip》这个压缩包中包含的是一份iOS应用的源代码,它由开发者gooddoug创建,项目名为Cravenstar,版本号为16d97a2。这个项目可能是一个学习资源,也可能是一个实际...

    IOS应用源码——nevyn-overload-0.3-0-gae3b7f5.zip

    【标题】"IOS应用源码——nevyn-overload-0.3-0-gae3b7f5.zip" 提供的是一份iOS应用的源代码,版本号为0.3,标识符为gae3b7f5。这个压缩包很可能包含了一个完整的iOS项目,开发者可能在其中实现了特定的功能或者用于...

Global site tag (gtag.js) - Google Analytics