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
相关产品推荐
相关产品推荐

