Conditional views in SwiftUI

One of the powerful SwiftUI features is custom view modifiers. Let’s see how they can help us to conditionally display the views

Vladimirs Matusevics
Mac O’Clock
2 min readJun 20, 2020

--

Foggy road ahead

Let's take a look at this simple example:

If we would want to hide a subtitle text based on some condition there are few options on how to do this.

The most straightforward is to add a State variable and if condition to replace it with the EmptyView.

It’s simple and easy to read but it becomes a bit messy when there are multiple optional blocks and more complex conditions.

Let’s see how we can use ViewModifier to improve this piece of code. So let’s create one and wrap our condition in it’s body:

Please note that we are wrapping our view into the Group view to avoid this opaque type error:

“Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type”

Of course, there is a couple of other ways, like wrapping it into AnyView or using ViewBuilder property wrapper. It’s up to you what way to choose.

Now we can use our shiny new ViewBuilder to make our view optional:

It already looks a bit nicer. Isn’t it?
But, let’s add an extension to the View so it’s even easier to use and read.

Here is how our final code will look like:

You can find the final result for the Playground in this Gist on Github.

I hope what I shared did help you!

--

--