简体   繁体   中英

SwiftUI: Getting array of string from another view

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!

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
}

Using Generate memberwise initializer fixed the problem:

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

在此处输入图像描述

Just change layout to a let constant:

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

Then the auto-generated init will not be private.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM