Swift笔记:异常处理

作者: Abnerzj | 来源:发表于2016-11-25 16:08 被阅读140次

Swift版本:3.0+

前言

异常,简单理解就是应用程序报错了。在开发中,程序出现异常是很正常的,这就需要我们要有容错机制,在程序出现异常时做相应的处理,避免应用出现卡死、崩溃等问题。由于Swift是强类型的语言,所以对代码的容错处理机制要求更加严格和谨慎规范,如果不符合规范在编译阶段就会报错。

Swift中的异常标识

如果在调用一个方法时,该方法最后有一个throws关键字,说明该方法会抛出异常。下面通过从项目中的JSON文件中获取数据初始化字符串的方法来讲解。首先看这个方法的声明:

// 通过本地JSON文件路径初始化字符串的方法声明
public convenience init(contentsOfFile path: String, encoding enc: UInt) throws

可以看到方法声明的最后添加throws关键字,说明这个方法在使用的时候会出现异常,如下代码:

// 从项目中获取json文件路径
let jsonPath = Bundle.main.path(forResource: "jsonPathName", ofType: "json")
guard jsonPath != nil else {
    print("从项目中获取json文件路径失败")
    return
}

//  获取json文件路径成功,从json文件路径中获取数据
//  如果不加异常处理,下面这一句代码可能会报错
let jsonStr = NSString(contentsOfFile: jsonPath!, encoding: String.Encoding.utf8.rawValue)

如果一个方法会抛出异常,那么需要对该异常进行处理,如下讲解。

Swift中的异常处理

Swift中提供三种异常捕获机制:trytry?try!,简单来说就是手动捕获处理异常、系统捕获处理异常、不处理异常。

1. try方式:手动捕获处理异常

1> Swift提供了do{}catch{}块的方式来手动捕获异常,do{}块放所有可能出现异常的代码,在调用可能出现异常的方法前必须加上try关键字。如果出现异常,catch{}块中会自动捕获error对象,error中包含所有的异常信息,我们主要在这里面对异常进行处理。
2> 使用手动处理异常会造成do{}块中的代码可阅读性差,但是可以在catch{}块中针对特定的异常错误进行处理。

do {
     // 从项目中获取json文件路径
     let jsonPath = Bundle.main.path(forResource: "jsonPathName", ofType: "json")
     guard jsonPath != nil else {
         print("从项目中获取json文件路径失败")
         return
     }
            
     // 从json文件路径中获取数据
     let jsonStr = try NSString(contentsOfFile: jsonPath!, encoding: String.Encoding.utf8.rawValue)

     // Todo...   
} catch {
     // error:异常的对象
     print(error)
}

2. try?方式:系统捕获处理异常

try?方式也是我们常用的方式,如果调用的方法出现了异常,则该方法返回nil。如果没有异常,则返回对应的对象。所以我们只需要根据系统给我们返回的内容,通过guard表达式来做验证处理即可。

// 从项目中获取json文件路径
let jsonPath = Bundle.main.path(forResource: "jsonPathName", ofType: "json")
guard jsonPath != nil else {
    print("从项目中获取json文件路径失败")
    return
}

//  获取json文件路径成功,从json文件路径中获取数据
guard let jsonStr = try? NSString(contentsOfFile: jsonPath!, encoding: String.Encoding.utf8.rawValue) else {
    print("从json文件中获取数据失败")
    return
}

// 从json文件中获取数据成功,Todo...   

3. try!方式:不处理异常

不建议使用try!方式,非常危险。相当于你直接告诉系统该方法没有异常,但是如果该方法出现了异常,那么程序会崩溃。

// 从项目中获取json文件路径
let jsonPath = Bundle.main.path(forResource: "jsonPathName", ofType: "json")
guard jsonPath != nil else {
    print("从项目中获取json文件路径失败")
    return
}

//  获取json文件路径成功,从json文件路径中获取数据
//  如果该方法出现了异常,那么程序会崩溃
let jsonStr = try! NSString(contentsOfFile: jsonPath!, encoding: String.Encoding.utf8.rawValue)

总结

处理异常其实就三种方式trytry?try!

相关文章

  • Swift笔记:异常处理

    Swift版本:3.0+ 前言 异常,简单理解就是应用程序报错了。在开发中,程序出现异常是很正常的,这就需要我们要...

  • swift异常处理

    swift像其他编程语言一样可以抛出异常并处理异常,本文就详细说一下在swift中抛出并处理异常,swift中的一...

  • Swift-异常处理四种方式

    跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处理的能...

  • SQLite.swift的使用

    知识储备:swift中异常处理 SQLite.swift这个库中有很多的异常处理,详细了解请点击下面的地址: Sw...

  • Swift - 异常处理

    说明 跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处...

  • Swift备忘

    Swift初体验 Swift Tips Swift三种不同的【异常处理方式】 Swift 3.0 private变...

  • Swift 处理异常

    处理方式 定义异常类型 在 Swift 中,错误用符合Error协议的类型的值来表示。这个空协议表明该类型可以用于...

  • swift——异常处理

    FileManager.swift ViewController.swift

  • swift 异常处理

    序言 对异常的正确处理能够明确反映在代码执行中出现的问题,使得在接下来的debug快速定位问题所在的地方,提高de...

  • Swift 异常处理

    异常的由来 在写代码的过程中,我们不能保证自己的每一行代码,都能够正确地执行。不能保证每一个函数,都会返回我们所期...

网友评论

    本文标题:Swift笔记:异常处理

    本文链接:https://www.haomeiwen.com/subject/yaiipttx.html