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)
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