0

有很多类似的问题,但没有人描述如何使用try?+ double optional 处理异常。

我知道 str1 不会产生异常。这只是一个例子:

let str1: String? = "some string"
let str2: String? = try? str1 //compilation error because "try? str1" returns object of type String??

一种可能的解决方案是 replace try?-> try

let str1: String? = "some string"
let str2: String? = {
    do {
        return try str1
    } catch {
        return nil
    }
}()

但是可以try?像下面这样保存吗?

let str2: String? = try? ...//do something with str1 in the same single line

PS 在 Swift 5 中,初始代码可以工作,但我需要在 Swift 4 中使用它(升级到 Swift 5 需要对项目进行重大更改)

4

1 回答 1

2

do - try - catch自Swift 3 中引入错误处理以来,返回双可选是默认行为。

在 Swift 5 SE 230 中:扁平化由 'try?' 产生的嵌套选项 已实施。

升级到 Swift 5 需要对项目进行重大更改

去做吧,这是值得的。与 Swift 2 到 3 相比,这些变化没有那么剧烈

于 2021-01-12T14:44:34.930 回答