《从零开始学Swift》学习笔记(Day54)——抛出错误

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

能放到try后面调用函数或方法都是有要求的,他们是有可能抛出错误,在这些函数或方法声明的参数后面要加上throws关键字,表示这个函数或方法可以抛出错误。

声明抛出错误方法示例代码如下:

//删除Note记录方法

func remove(model: Note) throws {

  ...

}

//查询所有记录数据方法

func findAll() throws -> [Note] {

    ...

}

上述代码remove(_:)方法没有返回值,throws关键字放到参数后面。findAll()有返回值throws关键字放到参数和返回值类型之间。

 

在函数或方法中抛出错误

一个函数或方法能够声明抛出错误,是因为在函数或方法中产生并抛出了错误,这样函数或方法声明抛出错误才有实际的意义。

在产生并抛出错误方式:

  • 在函数或方法中通过throw语句,人为地抛出错误。

  • 在函数或方法中调用的其他可以抛出错误函数或方法,但是没有捕获处理,会导致错误被传播出来。

    示例代码如下:

    //删除Note方法
    
    func remove(model: Note) throws {        
    
        
    
        guard let date = model.date else {        //判断抛出时候是有了guard语句
    
            //抛出"主键为空"错误
    
            throw DAOError.PrimaryKeyNull      
    
        }
    
        //比较日期主键是否相等
    
        for (index, note) in listData.enumerate() where note.date == date {
    
            listData.removeAtIndex(index)
    
        }
    
    }
    
     
    
    //查询所有数据方法
    
    func findAll() throws -> [Note] {        
    
        
    
        guard listData.count > 0 else {           //判断抛出时候是有了guard语句
    
            //抛出"没有数据"错误。
    
            throw DAOError.NoData          
    
        }
    
        return listData
    
    }
    
     
    
    func printNotes() throws {               //声明抛出错误
    
        
    
        let datas  = try findAll()        
    
        for note in datas {
    
            print("date : \(note.date!) - content: \(note.content!)")
    
        }
    
    }
    
    try printNotes()                 
    

guard语句最擅长处理这种早期判断,条件为false情况下抛出错误。

findAll()语句本身有可能产生错误,但是并没有使用catch语句捕获并处理,这样就导致了这个错误传播给该函数或方法的调用者,如果它的调用者也都不捕获处理,那么最后程序会出现运行期错误。

 

欢迎关注关东升新浪微博@tony_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


http://www.niftyadmin.cn/n/1036407.html

相关文章

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

原创文章,欢迎转载。转载请注明:关东升的博客在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢?1.使用try? try?会将错误转换…

Windows命令行终端配置

配置Windows命令行背景 你的命令行是这样的??? 或者是这样的??? 是不是看着背景太单调了??? 那你再看看我的: 话不多说,直接干!&…

《从零开始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范

原创文章,欢迎转载。转载请注明:关东升的博客程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要。命名方法很多,但是比较有名的,广泛接受命名法有:匈牙利命名,一般只是命…

【MySQL数据库系列】一、认识数据库、建库建表操作

文章目录一、初识数据库二、MySQL基本数据类型三、MySQL基本逻辑运算符四、“数据库”的基本操作五、“表”的基本操作一、初识数据库 数据库:能更有效的管理数据,数据库可以提供远程服务,也就是说可以通过远程连接来使用数据库,…

《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:文件注释、文档注释、代码注释、使用地标注释

原创文章,欢迎转载。转载请注明:关东升的博客前面说到Swift注释的语法有两种:单行注释(//)和多行注释(/*...*/)。这里来介绍一下他们的使用规范。 1、文件注释文件注释就在每一个文件开头添加注…

【MySQL数据库系列】二、MySQL数据库增删改查(聚合查询、多表查询)

上次我们讲了数据库的创建和删除,还有一些没讲完的限制,本文我们就一起讲了,然后开始讲数据库的增删改查操作,涉及到基本的增删改查和聚合查询、多表查询等。都算是比较难的知识点,多敲敲代码。 前期文章:…

《从零开始学Swift》学习笔记 (Day 58)—— Swift编码规范之变量或常量声明规范

原创文章,欢迎转载。转载请注明:关东升的博客声明是在声明变量、常量、属性、方法或函数和自定义类型时候需要遵守的规范。首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释。示例代码如…

【经典面试题】无序数组中,求第K大的数(堆、荷兰国旗问题、bfprt算法)

今天来看一到算法题!经典面试题了,将从时间复杂度一般的解法,再到最优解!!! 题目:查找一个无序数组中,第K大的数。LeetCode链接 文章目录解法一、堆解法二、改进“荷兰国旗问题”解法…