如何将Picker的用户选择传递给Button以执行对应函数?
你完全不需要借助Text组件和中间字符串变量来传递Picker的选择,直接利用selectedFunction这个@State变量就能完成逻辑,以下是简化后的代码:
import SwiftUI struct ContentView: View { // 定义Picker选项枚举,添加描述属性方便显示 enum MyFuncPicker: String, CaseIterable, Identifiable { case myfunc1, myfunc2, myfunc3 var id: Self { self } // 自定义选择后的显示文本 var description: String { switch self { case .myfunc1: return "function number one selected" case .myfunc2: return "function number two selected" case .myfunc3: return "function number three selected" } } } @State private var selectedFunction: MyFuncPicker = .myfunc1 var body: some View { VStack { // Picker保持原绑定逻辑,选项用ForEach遍历枚举简化代码 Picker(selection: $selectedFunction, label: Text("select Function")) { ForEach(MyFuncPicker.allCases) { funcCase in Text(funcCase.rawValue).tag(funcCase) } } // 直接用枚举的description显示选择提示,无需多个Text+onAppear Text(selectedFunction.description) Button("Button") { // 直接基于selectedFunction执行对应逻辑,无需中间字符串转换 switch selectedFunction { case .myfunc1: print("func1") case .myfunc2: print("func2") case .myfunc3: print("func3") } } .padding() .frame(width: 400.0, height: 400.0) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
优化说明:
- 移除了多余的
SelectMyFuncString变量,直接使用绑定的selectedFunction状态变量传递选择状态 - 给枚举添加
description属性,统一管理选择后的提示文本,避免重复编写多个Text组件 - Picker选项通过
ForEach遍历枚举的allCases生成,新增选项时无需手动添加Text,代码扩展性更强 - Button的点击逻辑直接基于枚举值判断,省去字符串转换步骤,逻辑更清晰且不易出错
内容的提问来源于stack exchange,提问作者Denis Andreev
相关产品推荐
相关产品推荐

