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

简介:

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

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

1
2
3
4
5
6
7
8
//删除Note记录方法
func remove(model: Note) throws  {
   ...
}
//查询所有记录数据方法
func findAll()  throws -> [Note] {
     ...
}


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

在函数或方法中抛出错误

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

   在产生并抛出错误方式:

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

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

       示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//删除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关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1748307,如需转载请自行联系原作者

相关文章
|
Swift
Swift学习笔记——页面跳转
创建一个single view app后,项目中有main.storyboard,里面是一个viewcontroller。 那么我们如何实现页面跳转 首先添加一个导航控制器Navigation Controller。点击右上的➕,然后选择控件拖到面板上即可
1150 0
|
前端开发 测试技术 Swift
Swift学习笔记——新建项目
在xcode菜单中选择 new -> project -> single view app 点击next在弹出窗中填写项目名称 这里languge有可以选择object-c或swift作为项目语言。这里我们学习swift,所以选择swift。 如果language选择swift,下面的user interface可以选择swiftUI和storyboard。 SwiftUI是2019 年 WWDC 大会上,苹果在压轴环节向大众宣布了基于 Swift 语言构建的全新 UI 框架,与flutter类似,是用代码编写页面,支持快速预览。
667 0