您的位置:首页 > 移动开发 > Swift

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

2015-12-30 10:36 381 查看
原创文章,欢迎转载。转载请注明:关东升的博客 能放到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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息



更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: