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

Swift如何通过引用获取数组元素以修改其中的结构体实例?

你遇到的报错是因为Swift中数组的first是只读计算属性,返回的是首元素的值拷贝(因为结构体是值类型),并不指向数组内的原始存储,所以不支持用&取引用,才会抛出Use of extraneous '&'错误。

你要的需求完全可以实现,不需要用删除再插入的冗余方案,推荐以下两种实现:

方案1:直接通过下标修改(最简洁无额外成本)

只要先判断数组非空,直接通过下标访问首元素即可调用mutating方法修改原数组内的元素,时间复杂度为O(1),远优于你当前删除+插入的O(n)方案:

if !unconfirmedDataFromSocket.isEmpty {
    unconfirmedDataFromSocket[0].markAsResend()
}

通过数组下标访问可变元素时,操作的就是数组内部存储的原始值,不需要额外拷贝替换。

方案2:扩展封装(更高复用性)

如果需要频繁修改集合的首元素,你可以给MutableCollection加个通用扩展,封装安全修改的逻辑,完全避免手动判断下标越界的风险:

extension MutableCollection {
    /// 当集合非空时,修改第一个元素
    mutating func modifyFirst(_ handler: (inout Element) throws -> Void) rethrows {
        guard !isEmpty else { return }
        try handler(&self[startIndex])
    }
}

使用时代码会更简洁:

unconfirmedDataFromSocket.modifyFirst { $0.markAsResend() }

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:48:02