Swift 中 rethrows 的用法

rethows 是 Swift 中非常重要的处理错误的方法。

如果一个函数A(例如map)的其中一个参数是一个函数类型B(map的闭包),且B有可能接受throw或不throw的函数,那么A就可以声明为rethrows,这时如果接受的B是不需要的throw的,就不用写do catch来处理错误,如果接受的是throw的才需要。

我们以 Swift 源代码中的 map 方法为例,来帮助我们理解 rethrows:

@inlinable
  public func map<T>(_ transform: (Element) throws -> T
  ) rethrows -> [T] {
      //具体方法省略
  }

在 map 函数的定义中,map 函数接受了一个可能产生错误的方法,但接受的方法也可能是不会产生错误的,比如:

let values = [2.0,4.0]
let squares = values.map { $0 * $0 }
//返回4.0,16.0

由于 map 使用了 rethrows,当我们使用了不会产生错误的方法($0 * $0)时,就不用再写 do-catch 等处理错误的方法了。

假如我们把 map 的实现改成如下,将 rethrows 替换成 throws:

@inlinable
  public func map<T>(_ transform: (Element) throws -> T
  ) throws -> [T] {
      //具体方法省略
  }

则当我们调用上面乘法代码时,就必须写成:

let values = [2.0,4.0]
do { let value = try values.map { $0 * $0 }} catch { print("error") }

多了一些无谓的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值