• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift异常处理:throw和rethrow

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
Swift异常处理体现了函数式语言的特性。因此我们能够传一个会抛出异常的函数闭包(高阶函数)作为參数传到还有一个函数中(父函数),父函数能够在子函数抛出异常时直接向上抛出异常,这时用rethrowkeyword表示引用闭包时抛出的异常。
throwkeyword和Java一样,就是说调用这个函数本身可能会抛出异常。
rethrow能够看作是throw的子集,Swift不把rethrow作为完整的类型。

比如一个函数不能同一时候用throw和rethrow抛出异常,高阶函数闭包定义中也不能包括rethrow。

rethrow更像函数的属性(相似@noreturn)。rethrow仅仅是在函数作为參数调用的上下文中才有意义。就是为了简化语法的。

一个接受闭包作为參数的函数有以下三种throw选择

1、throw异常,这表示这个函数可能会抛出异常。不管作为參数的闭包是否抛出异常
2、rethrow异常,这表示这个函数本身不会抛出异常,但假设作为參数的闭包抛出了异常。那么它会把异常继续抛上去。比如
func map<T>(@noescape transform: (Generator.Element) throws -> T) rethrows -> [T]

3、不抛出异常,这表示这个函数会处理參数闭包的异常,或者不正确闭包进行运算。


当我们使用Swift异常处理时,应该不觉得它是抛出异常。而是返回不同的类型




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap