gurehbgui
gurehbgui

Reputation: 14684

Instance member cannot be used on type in SwiftUI Preview

Following error in my preview:

struct DetailView: View {
    var header: DataProvider.DataHeader

    var body: some View {
        Text("...")
    }
}

struct DetailView_Previews: PreviewProvider {
    var a = DataProvider.DataHeader(title: "a", text: "b")

    static var previews: some View {
        DetailView(header: a)
    }
}

Error is:

Instance member 'a' cannot be used on type 'DetailView_Previews'

Why this is happening?

Upvotes: 43

Views: 17852

Answers (4)

Mojtaba Hosseini
Mojtaba Hosseini

Reputation: 119292

You can use the new #Preview macro instead:

#Preview {
    let a = DataProvider.DataHeader(title: "a", text: "b")

    DetailView(header: a)
}

Upvotes: 0

Michael Jennings
Michael Jennings

Reputation: 1

I would suggest doing something like this.

struct DetailView_Previews: PreviewProvider {
   static func getHeader()->DataProvider.DataHeader{
      var header:DataProvider.DataHeader = DataProvider.DataHeader(title: "a", text: "b")
    
      return header
   }

   static var previews: some View {
        DetailView(header: getHeader())
    }
}

Upvotes: -2

Asperi
Asperi

Reputation: 257693

It is due to static var preview,

so use either static as well

static var a = DataProvider.DataHeader(title: "a", text: "b")

or construct in place

DetailView(header: DataProvider.DataHeader(title: "a", text: "b"))

Upvotes: 88

oskarko
oskarko

Reputation: 4178

SwiftUI Preview -> You have to use static var here:

struct ErrorView_Previews: PreviewProvider {
    @State static var alert = false
    @State static var error = "Please fill all the contents properly"

    static var previews: some View {
        ErrorView(alert: $alert, error: $error)
    }
}

Upvotes: 18

Related Questions