Make Code Easier to Write and Read in Swift 5.9
Improve your code with inline if-else and switch statements available in Swift 5.9. Make your codebase less tedious to write.
• 3 min read
Availability
Swift 5.9
This changes affect if else
and switch
statements.
Let's see them more in detail.
If-else
The ternary syntax
is really handy and allows us to return a result based on a condition in a let
statement.
This is really useful in simple cases that involves only one condition but if there are more nested conditions it can become really hard to read, like the example below.
let bullet = isRoot && (count == 0 || !willExpand) ? ""
: count == 0 ? "- "
: maxDepth <= 0 ? "▹ " : "▿ "
To make the above code more readable we could wrap it in a closure
and use if else
statements. But in this case we should use the return
keyword every time we need to return a value.
let bullet = {
if isRoot && (count == 0 || !willExpand) { return "" }
else if count == 0 { return "- " }
else if maxDepth <= 0 { return "▹ " }
else { return "▿ " }
}()
The new syntax avoids all of these problems.
Now the if else
statement can start right after the let
declaration without any closure
or ternary syntax
.
let bullet = if isRoot && (count == 0 || !willExpand) { "" }
else if count == 0 { "- " }
else if maxDepth <= 0 { "▹ " }
else { "▿ " }
The new syntax allows return
keyword omission but, if you prefer, you can still add return
wherever you need it.
Of course you can still use the two techniques above in Swift 5.9 if you wish.
Switch
So far Swift has allowed us to omit the return
keyword in func
s and computed var
s when the body is a single expression, however we must use the return
keyword in switch
statements if we need to return a value.
This was needed up until now.
With Swift 5.9 you can omit the return
keyword even in switch
statements!
enum Color {
case red
case green
case blue
var color: Color {
switch self {
case .red: Color.red
case .green: Color.green
case .blue: Color.blue
}
}
}
func width(_ x: Unicode.Scalar) -> Int {
switch x.value {
case 0..<0x80: 1
case 0x80..<0x0800: 2
case 0x0800..<0x1_0000: 3
default: 4
}
}
Resources
Some examples in this article are taken from SE-0380.
Conclusion
These are really nice additions to Swift 5.9 that will improve the syntax and will make our code more readable and less tedious to write.
If you have any question about this article, feel free to email me or tweet me @franceleonidev and share your opinion.
Thank you for reading and see you in the next article!
Share this article