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

SwiftUI视图间变量传递异常:Shop视图初始化未生效

解决SwiftUI中Shop视图初始化未使用且点击无响应的问题

错误原因

你在按钮的action闭包里只是创建了Shop视图的实例,但没有将它添加到SwiftUI的视图层级中,所以编译器提示“Result of 'Shop' initializer is unused”,点击按钮自然不会产生任何界面变化。

解决方案

SwiftUI中切换视图需要使用专门的导航组件,比如NavigationLink(页面跳转)或sheet(弹出层),以下是两种可行的实现方式:

方式1:使用NavigationStack(iOS 16+)/ NavigationView(iOS 15及以下)

将主视图嵌套在导航容器中,用NavigationLink替代普通Button来跳转至商店界面:

struct ContentView: View {
    @State private var muffins = 0
    @State private var worth = 1
    @State private var worthuc = 10
    @State private var muffinsps = 0
    @State private var muffinspsuc = 50

    var body: some View {
        NavigationStack { // iOS 16+ 用这个,iOS 15及以下替换为 NavigationView
            VStack {
                // 你的松饼点击区域示例
                Text("松饼数量: \(muffins)")
                    .font(.largeTitle)
                Button("点击松饼") {
                    muffins += worth
                }
                .padding()
                .background(.blue)
                .foregroundColor(.white)
                .cornerRadius(10)

                // 跳转至商店的导航按钮
                NavigationLink("进入商店") {
                    Shop(muffins: $muffins, worth: $worth, worthuc: $worthuc, muffinsps: $muffinsps, muffinspsuc: $muffinspsuc)
                }
                .padding()
            }
            .navigationTitle("松饼点击器")
        }
    }
}

方式2:使用sheet弹出商店界面

通过@State变量控制sheet的显示/隐藏,点击按钮时触发弹出:

struct ContentView: View {
    @State private var muffins = 0
    @State private var worth = 1
    @State private var worthuc = 10
    @State private var muffinsps = 0
    @State private var muffinspsuc = 50
    @State private var isShowingShop = false // 控制商店弹出状态

    var body: some View {
        VStack {
            Text("松饼数量: \(muffins)")
                .font(.largeTitle)
            Button("点击松饼") {
                muffins += worth
            }
            .padding()
            .background(.blue)
            .foregroundColor(.white)
            .cornerRadius(10)

            // 打开商店的按钮
            Button("打开商店") {
                isShowingShop = true
            }
            .padding()
            .background(.green)
            .foregroundColor(.white)
            .cornerRadius(10)
        }
        // 绑定sheet显示状态,传入Shop视图并传递绑定变量
        .sheet(isPresented: $isShowingShop) {
            Shop(muffins: $muffins, worth: $worth, worthuc: $worthuc, muffinsps: $muffinsps, muffinspsuc: $muffinspsuc)
        }
    }
}

补充说明

你的Shop结构体中@Binding变量的定义是正确的,只要通过上述方式将它添加到视图层级中,就能正常接收主视图的绑定变量,实现数据双向同步。

内容的提问来源于stack exchange,提问作者CrazyCodingCranberry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:44:54