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

Swift向数组添加元素时实际追加的是副本而非引用吗?

问题根因

该现象的核心原因是 Swift 中结构体(struct)属于值类型,遵循值传递语义,和类(class)的引用传递逻辑完全不同。

代码执行逻辑拆解

  • 自定义的test是结构体类型,初始化变量t后,系统分配独立内存存储t的属性,此时itest初始值为nil。
  • 执行tests.append(t)操作时,值类型的传递规则会触发完整拷贝:将t当前的所有属性值复制一份存入数组内存,数组内的实例和原变量t是完全独立的两个内存对象,没有引用关联。
  • 后续修改t.itest = 99时,仅修改了原变量t对应内存的属性值,数组内的拷贝实例不受任何影响,因此两次打印结果分别为nil和Optional(99)。

补充说明

如果需要实现数组存储引用、修改原变量同步影响数组内实例的效果,将test的声明从struct改为class即可,修改后两次打印结果均为Optional(99)。

// 修改为引用类型的示例
class test {
    var itest: Int?;
}

内容的提问来源于stack exchange,提问作者frameworker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:03