You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI技术问题:向TagsView传字符串数组遇初始化器权限错误

问题解决:TagsView初始化器无法访问的问题

错误原因

你的TagsView结构体中包含了一个私有存储属性private var layout = [GridItem(.fixed(30))],Swift会自动合成包含所有存储属性的成员初始化器,而只要结构体中有私有存储属性,自动生成的初始化器访问级别就会变成private,导致外部视图(比如MainView)无法调用TagsView(tags:)进行初始化。

解决方案

有两种可行的修复方式,根据你的需求选择:

方案1:移除layout的私有访问修饰符

如果layout不需要严格私有,直接去掉private关键字,让自动合成的初始化器可以被外部访问:

struct TagsView: View {
    var tags: [String]
    var layout = [GridItem(.fixed(30))] // 移除private

    var body: some View {
        HStack {
            Spacer()
            GeometryReader { geo in
                ScrollView(.horizontal, showsIndicators: false) {
                    LazyHGrid(rows: layout) {
                        ForEach(tags, id: \.self) { tag in
                            Button(tag) {
                                // 按钮点击逻辑
                            }
                            .font(.callout.bold())
                        }
                    }
                }
            }
        }
    }
}

方案2:手动编写公开的初始化器

如果需要保持layout的私有性,手动为TagsView编写一个仅接收tags参数的公开初始化器:

struct TagsView: View {
    var tags: [String]
    private var layout = [GridItem(.fixed(30))]

    // 手动定义公开初始化器,仅暴露tags参数
    init(tags: [String]) {
        self.tags = tags
    }

    var body: some View {
        HStack {
            Spacer()
            GeometryReader { geo in
                ScrollView(.horizontal, showsIndicators: false) {
                    LazyHGrid(rows: layout) {
                        ForEach(tags, id: \.self) { tag in
                            Button(tag) {
                                // 按钮点击逻辑
                            }
                            .font(.callout.bold())
                        }
                    }
                }
            }
        }
    }
}

额外注意

你原来的代码中body部分存在未闭合的大括号,修复时需要补全所有结构的闭合括号,否则会引发额外的编译错误。


内容的提问来源于stack exchange,提问作者Mc.Lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:33:24