gpt4 book ai didi

swift - swift 抛出可选错误最干净的方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 00:38:37 28 4
gpt4 key购买 nike

解包一个可选的并将它传递给我通常使用的函数:

var optionalInt: Int?

optionalInt.map { someFunctionThatTakes(aNonOptional: $0) }

现在我有一个可选的错误,如果它不是 nil,我想抛出它:

var optionalError: Error?

optionalError.map { throw $0 }

这行不通,因为传递给 map 的闭包不能抛出。

另一种解决方案是使用完整的 if let 语法:

if let theError = optionalError { throw theError }

但这使用了变量名 theError 两次,并且比漂亮的 .map 实现更容易出错。

有谁知道更简洁的实现方式?

最佳答案

This won't work because the closure passed to map can't throw.

那不是真的。闭包传递给

func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?

可以抛出错误。但这使得 map() 称自己为(重新)抛出表达式,因此必须使用 try 调用它:

var optionalError: Error?
// ...
try optionalError.map { throw $0 }

我可能还会用

if let theError = optionalError { throw theError }

这很清楚,并且没有使用 Optional.map 的副作用(丢弃 Void 类型的返回值?)。

关于swift - swift 抛出可选错误最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441181/

28 4 0
文章推荐: javascript - 错误 : Callback was already called when using pg-promise with async series
文章推荐: ios - UITableView 在删除一行或多行后留下空白单元格的模式
文章推荐: php - 从 php 中的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com