Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

exception - try? returns double optional in Swift 4

There are a lot of similar questions but no one describes how to handle exceptions with try? + double optional.

I know str1 doesn't generate exception. It is just an example:

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

One of the possible solutions is replace try? -> try:

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

But is it possible to preserve try? like the following?

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

P.S. In Swift 5 the initial code works but I need to something with it in Swift 4 (upgrading to Swift 5 requires significant changes in project)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Returning a double optional was the default behavior since Error Handling with do - try - catch was introduced in Swift 3.

In Swift 5 SE 230: Flatten nested optionals resulting from 'try?' has been implemented.

upgrading to Swift 5 requires significant changes in project

Do it, it's worth it. The changes are less dramatic than from Swift 2 to 3


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...