SwiftUI表格多选时,如何获取ID外的对象属性或完整对象
解决方案
方法:使用计算属性转换选中结果
直接通过计算属性,基于当前选中的UUID集合,从数据源中筛选出对应的General对象或提取policyId,无需修改原有Table的selection绑定逻辑。
1. 获取选中的完整General对象集合
添加以下计算属性,会自动根据选中的UUID匹配数据源中的对象:
private var selectedPolicies: Set<General> { Set(networkController.allPoliciesDetailedGeneral.filter { selectedPolicyIDs.contains($0.id) }) }
2. 获取选中的policyId集合(处理可选值)
如果只需要policyId,可以基于上面的对象集合进一步提取:
private var selectedPolicyIds: Set<Int> { Set(selectedPolicies.compactMap { $0.policyId }) }
使用示例
在需要传递选中数据的函数中直接调用这些计算属性即可:
// 传递完整对象集合 func handleSelectedPolicies() { processPolicies(selectedPolicies) } // 传递policyId集合 func handleSelectedPolicyIds() { processPolicyIds(selectedPolicyIds) }
说明
- 计算属性会自动响应
selectedPolicyIDs和networkController.allPoliciesDetailedGeneral的变化,无需额外添加监听逻辑 - 使用
Set保证数据唯一性,和原selection的集合类型保持一致 compactMap用于过滤掉policyId为nil的情况,确保集合中都是有效Int值
内容的提问来源于stack exchange,提问作者boristheslug
相关产品推荐
相关产品推荐

