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
相关产品推荐
相关产品推荐

