Home > Mobile >  SwiftUI: Getting array of string from another view
SwiftUI: Getting array of string from another view

Time:08-26

I have a view called TagView which creates a list of tags using LazyHGrid I am trying to get the array of tags that loads from the web service and pass it from the main view to TagView. Here is the code:

struct TagsView: View {

var tags: Array<String>
private var layout = [GridItem(.fixed(30))]

var body: some View {
    HStack {
        Spacer()
        GeometryReader { geo in
            ScrollView(.horizontal, showsIndicators: false) {
            
                    LazyHGrid(rows: layout) {
                        ForEach(tags, id: \.self) {
                            Button("\($0)") {
                                
                            }
                            .font(.callout.bold())

                        }
                    }
                }
           }
    

After creating the variable: var tags: Array<String> I need to get the array from the main view like this:

struct MainView: View {
    var model: Model
    var body: some View {
        VStack {
            TagsView(tags: model.tags)
        }
    }
}

But I am getting this error:

TagsView' initializer is inaccessible due to 'private' protection level

I tried with @Binding and still no luck, any help would be great!

CodePudding user response:

The reason for this error is that the synthesized init is being marked private since one of the properties is private. To solve the problem, remove the private or add:

init(tags: Array<String>) {
    self.tags = tags
}

CodePudding user response:

Just change layout to a let constant:

    private let layout = [GridItem(.fixed(30))]

Then the auto-generated init will not be private.

CodePudding user response:

Using Generate memberwise initializer fixed the problem:

internal init(tags: Array<String>) {
        self.tags = tags
    }

enter image description here

  • Related