swiftlistswiftuiempty-list

SwiftUI list empty state view/modifier


I was wondering how to provide an empty state view in a list when the data source of the list is empty. Below is an example, where I have to wrap it in an if/else statement. Is there a better alternative for this, or is there a way to create a modifier on a List that'll make this possible i.e. List.emptyView(Text("No data available...")).

import SwiftUI

struct EmptyListExample: View {

    var objects: [Int]

    var body: some View {
        VStack {
            if objects.isEmpty {
                Text("Oops, loos like there's no data...")
            } else {
                List(objects, id: \.self) { obj in
                    Text("\(obj)")
                }
            }
        }
    }

}

struct EmptyListExample_Previews: PreviewProvider {

    static var previews: some View {
        EmptyListExample(objects: [])
    }

}

Solution

  • One of the solutions is to use a @ViewBuilder:

    struct EmptyListExample: View {
        var objects: [Int]
    
        var body: some View {
            listView
        }
    
        @ViewBuilder
        var listView: some View {
            if objects.isEmpty {
                emptyListView
            } else {
                objectsListView
            }
        }
    
        var emptyListView: some View {
            Text("Oops, loos like there's no data...")
        }
    
        var objectsListView: some View {
            List(objects, id: \.self) { obj in
                Text("\(obj)")
            }
        }
    }