Welcome to OGeek Q&A 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 Reply

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...