You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:45:05