Swift如何从枚举类型数组中删除元素?修改后原数组未生效怎么办
问题核心原因
Swift 中struct属于值类型,你在switch分支里通过case var more as More拿到的more是原数组中More元素的独立拷贝,修改这个局部变量的属性,自然不会同步变更原数组内的元素。
修复方案
修改完局部more变量后,把它重新赋值回原数组对应的下标位置即可,完整可运行代码如下:
// 先判断数组非空,避免下标越界崩溃 guard !model.myArray.isEmpty else { return } let lastIndex = model.myArray.count - 1 switch model.myArray[lastIndex] { case var more as More: // 下载新联系人 downloadfunction() // 提前判断peopleIds存在且长度足够,避免移除时越界 guard let idsCount = more.peopleIds?.count, idsCount >= 100 else { // 不足100个的场景可按需处理,示例为清空所有id more.peopleIds?.removeAll() model.myArray[lastIndex] = more return } // 移除已下载完成的100个id let range = 0...99 more.peopleIds?.removeSubrange(range) // 关键步骤:把修改后的more重新赋值回原数组对应位置 model.myArray[lastIndex] = more default: // 最后一个元素不是More类型的其他处理逻辑 break }
补充注意事项
- 如果移除后
peopleIds为空,你可以按需选择把这个More元素从数组中移除,调用model.myArray.remove(at: lastIndex)即可 - 所有涉及下标访问、数组范围操作的逻辑都建议加边界判断,避免运行时崩溃
内容的提问来源于stack exchange,提问作者vamp
相关产品推荐
相关产品推荐

