Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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

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

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

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

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

let values = [2.0,4.0]
let squares = values.map { let values = [2.0,4.0]
do { let value = try values.map { [+++] * [+++] }} catch { print("error") } * [+++] }
//返回4.0,16.0

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

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

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

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

[+++]

多了一些无谓的代码。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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

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

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

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

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

let values = [2.0,4.0]
let squares = values.map { let values = [2.0,4.0]
do { let value = try values.map {  * [+++] }} catch { print("error") } * [+++] }
//返回4.0,16.0

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

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

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

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

[+++]

多了一些无谓的代码。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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

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

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

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

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

let values = [2.0,4.0]
let squares = values.map { let values = [2.0,4.0]
do { let value = try values.map {  *  }} catch { print("error") } * [+++] }
//返回4.0,16.0

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

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

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

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

[+++]

多了一些无谓的代码。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 5, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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

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

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

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

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

let values = [2.0,4.0]
let squares = values.map { let values = [2.0,4.0]
do { let value = try values.map {  *  }} catch { print("error") } *  }
//返回4.0,16.0

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

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

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

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

[+++]

多了一些无谓的代码。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Swift 中 rethrows 的用法_app_内存溢出

Swift 中 rethrows 的用法

Swift 中 rethrows 的用法,第1张

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

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

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

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

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

let values = [2.0,4.0]
let squares = values.map { let values = [2.0,4.0]
do { let value = try values.map {  *  }} catch { print("error") } *  }
//返回4.0,16.0

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

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

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

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

 

多了一些无谓的代码。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存