Array、Dictionary、Set 是值类型还是引用类型?

一句话结论:Swift 里的 Array、Dictionary、Set 全都是值类型(struct 实现)。


一、核心特性

  • 赋值、传参、返回时,逻辑上是拷贝一份
  • 修改副本,不会影响原数据
  • 底层有 Copy-on-Write(写时复制) 优化,只有真正修改时才拷贝,性能很高

二、代码一眼看懂

1. Array

Swift 复制代码
var a = [1,2,3]
var b = a
b.append(4)

print(a) // [1,2,3] 没变
print(b) // [1,2,3,4]

2. Dictionary

Swift 复制代码
var dict1 = ["id": 1]
var dict2 = dict1
dict2["id"] = 2

print(dict1) // ["id": 1]
print(dict2) // ["id": 2]

3. Set

Swift 复制代码
var s1: Set = [1,2,3]
var s2 = s1
s2.remove(1)

print(s1) // [1,2,3]
print(s2) // [2,3]

三、和引用类型(class)的区别

  • 值类型:拷贝内容,互不干扰
  • 引用类型:共享同一个对象,一改全改
  • 判断:用 == 比内容,=== 比引用地址

四、总结

  • Array / Dictionary / Set = 值类型
  • 赋值 = 逻辑拷贝
  • 修改副本不影响原数据
  • 有 COW 写时复制,安全又高效
相关推荐
Coder_张三1 天前
iOS 26 适配
前端·ios·swift
用户38034165882971 天前
崩溃率从 0.3% 到 0.04%:我们做对的不是修 bug,是让每个崩溃只发生一次
ios·swift
东坡肘子1 天前
当 Build in Public 重新转入地下 -- 肘子的 Swift 周报 #157
人工智能·swiftui·swift
用户38034165882972 天前
Flutter 迁 SwiftUI:AI 把页面"搬"过来只用了两周,我们补结构花了两个月
ios·swift
茶底世界之下2 天前
四角变换后的最小包围视口,为什么不能只把宽高取整?
ios·swift
茶底世界之下3 天前
预乘 Alpha 图层合成为什么会越叠越暗?
架构·swift
茶底世界之下5 天前
时间线效果层,为什么不能只复用一个处理器?
ios·swift
Cc.Y5 天前
Swift深度链接的极简之道
ios·cocoa·swift
传奇开心果编程6 天前
【SwiftUI提高练中学】第9课 安全与隐私
swiftui·移动开发·swift·编程语言理论·开发范式·编程框架·声明式ui
茶底世界之下6 天前
动态切换 nearest / linear 时,为什么不能只替换 sampler
ios·swift