SwiftUI如何将列表多选内容传递到下一个视图并在Xcode调试控制台打印
SwiftUI多选列表数据传递与打印解决方案
1. 多选条目传递到下一个视图
首先修改目标视图FlavorSearchView,新增两个属性用于接收传入的选中数据:
import SwiftUI struct FlavorSearchView: View { // 接收选中的应用、法规数据,如需修改可将let改为@State或@Binding let selectedApplications: [Application] let selectedLegislations: [Legislation] var body: some View { // 此处可自定义视图逻辑,直接使用上述两个属性即可 VStack(spacing: 20) { Text("选中的应用:\(selectedApplications.map { $0.name }.joined(separator: "、"))") Text("选中的法规:\(selectedLegislations.map { $0.name }.joined(separator: "、"))") } } }
之后修改WelcomeView中的NavigationLink代码,过滤出选中的条目后传入目标视图:
// 替换原有NavigationLink代码 NavigationLink(destination: FlavorSearchView( selectedApplications: applications.filter { $0.isSelected }, selectedLegislations: legislations.filter { $0.isSelected } )) { Text("Next") .padding() }
提示:原有代码中切换选中状态的三目表达式可以简化为applications[index].isSelected.toggle(),写法更简洁
2. 选中内容打印到Xcode调试控制台
可按需选择两种打印时机:
每次切换选中状态时实时打印
在两个列表的Button的action闭包末尾添加打印代码即可,以应用列表为例:
Button(action: { applications[index].isSelected.toggle() // 打印当前所有选中的应用 print("当前选中应用:\(applications.filter { $0.isSelected }.map { $0.name })") }) { // 原有Button内容代码不变 }
法规列表的Button同理添加对应打印代码即可。
点击Next跳转时一次性打印
给Next按钮添加点击手势触发打印,修改后的NavigationLink代码如下:
NavigationLink(destination: FlavorSearchView( selectedApplications: applications.filter { $0.isSelected }, selectedLegislations: legislations.filter { $0.isSelected } )) { Text("Next") .padding() .onTapGesture { let selectedAppNames = applications.filter { $0.isSelected }.map { $0.name } let selectedLegisNames = legislations.filter { $0.isSelected }.map { $0.name } print("===== 用户选中结果 =====") print("应用类:\(selectedAppNames)") print("法规类:\(selectedLegisNames)") } }
注意:请确保Application、Legislation两个结构体的定义在FlavorSearchView的可见作用域内,无需重复定义
内容的提问来源于stack exchange,提问作者Mark Burgun
相关产品推荐
相关产品推荐

