尝试? returns 双可选 Swift 4

try? returns double optional in Swift 4

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

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

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

可能的解决方案之一是替换 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

P.S。在 Swift 5 中,初始代码有效,但我需要在 Swift 4 中使用它(升级到 Swift 5 需要对项目进行重大更改)

自从 do - try - catch 错误处理在 Swift 3.

中引入以来,返回双精度可选值是默认行为

在Swift5SE 230: Flatten nested optionals resulting from 'try?'已经实现。

upgrading to Swift 5 requires significant changes in project

去做吧,值得。这些变化没有从 Swift 2 到 3

那么显着