zoukankan      html  css  js  c++  java
  • 《从零开始学Swift》学习笔记(Day54)——抛出错误

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

     

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

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

    //删除Note记录方法
    
    func remove(model: Note) throws {
    
      ...
    
    }
    
    //查询所有记录数据方法
    
    func findAll() throws -> [Note] {
    
        ...
    
    }

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

     

    在函数或方法中抛出错误

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

    在产生并抛出错误方式:

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

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

    示例代码如下:

    //删除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_关东升。
    关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                              ​
    更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
    智捷课堂论坛网站:http://51work6.com/forum.php

  • 相关阅读:
    Ralasafe基于策略模型
    如何让Oracle表字段自动增长
    Oracle中Number类型字段使用.netTiers和CodeSmith问题的解决方案
    GridView的DataFormatString参考
    解决.NET连接Oracle数据库的一些问题(转)
    C# WinForm开发系列 DataGridView
    C# 插件式程序开发
    Oracle中“字符串中的字符大小写敏感处理方法”
    做一个项目,平时都用到哪些工具提高效率(中)
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了(转)
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/5088008.html
Copyright © 2011-2022 走看看