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 写时复制,安全又高效
相关推荐
茶底世界之下2 天前
为什么预览、录制、离线导出不能共享同一个背压策略?
ios·swift
2501_915909062 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
东坡肘子2 天前
一场关于 SwiftUI 动画的“原生”之争 -- 肘子的 Swift 周报 #154
人工智能·swiftui·swift
2501_915918412 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
9765033353 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
传奇开心果编程4 天前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
丿Wayne4 天前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
大熊猫侯佩5 天前
独立 App 首发完成 iPhone Duo 展开态适配
ios·swiftui·swift
SoaringHeart6 天前
Swift 进阶&封装:仿 Get 给SwiftUI 添加路由导航能力
swiftui·swift
2501_915918416 天前
使用 VS Code 写 Swift 做 iOS 开发,插件能实现哪些功能,还有哪些短板
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程