Swift 3中如何移除模型数组内ID匹配指定值的元素?
解决方法:修正Filter条件并安全更新模型
看起来你是把filter的判断逻辑搞反啦!我们需要保留ID不等于customFlashId和customLikeId的元素,而不是筛选出等于它们的——后者会留下你要删除的元素,刚好和需求相反。
下面是完整的解决方案,我会考虑Swift中可选值的安全处理,避免空值崩溃:
// 先确保模型和数组都不为空,做安全处理 guard let originalData = self.categoriesModel?.childrenData else { // 如果childrenData为空,直接返回或者执行你需要的兜底逻辑 return } // 定义要移除的ID集合,方便后续扩展(以后加更多ID直接追加即可) let excludedIds = [customFlashId, customLikeId] // 对应值46和47 // 过滤出不在排除列表中的元素,赋值回模型 self.categoriesModel?.childrenData = originalData.filter { !excludedIds.contains($0.id) }
逻辑拆解:
- 用
guard let安全解包childrenData,避免强制解包引发的崩溃问题; - 将需要移除的ID存入数组,通过
contains判断元素ID是否在排除列表中,前面加!取反,就能得到需要保留的元素; - 最后把过滤后的数组重新赋值给
categoriesModel?.childrenData,完成模型更新。
如果不需要考虑后续扩展,也可以直接写判断条件:
self.categoriesModel?.childrenData = originalData.filter { $0.id != customFlashId && $0.id != customLikeId }
两种方式都能实现需求,用集合的写法更适合未来需要添加更多排除ID的场景,维护起来更省心。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

