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 写时复制,安全又高效
相关推荐
sakiko_1 天前
UIKit学习笔记3-布局、滚动视图、隐藏或显示视图
前端·笔记·学习·objective-c·swift·uikit
sakiko_2 天前
UIKit学习笔记5-使用UITableView制作聊天页面
笔记·学习·swift·uikit
朗清风2 天前
“\“在字符串表示正则语义中的作用
swift
四眼蒙面侠3 天前
深入 SwiftWork(第 0 篇):用 SwiftUI 构建一个 Agent 可视化工作台
swift·openagentsdk
sakiko_4 天前
UIKit学习笔记4-使用UITableView制作滚动视图
笔记·学习·ios·swift·uikit
四眼蒙面侠5 天前
深入 Open Agent SDK(番外篇):实战验证——把 SDK 塞进一个 macOS 原生 Agent 应用
swift·claudecode·bmad·agentsdk·openagentsdk
2501_915106326 天前
在Mac上搭建iOS开发环境的详细步骤与注意事项
ide·vscode·macos·ios·个人开发·swift·敏捷流程
harder3216 天前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
sakiko_6 天前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
四眼蒙面侠7 天前
深入 Open Agent SDK(五):会话持久化与安全防线
swift·claudecode·bmad·openagentsdk