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 天前
SPI 加入 Apple,Swift 迈向自举 -- 肘子的 Swift 周报 #142
人工智能·swiftui·swift
东坡肘子9 天前
Swift 还让你 Excited 吗?-- 肘子的 Swift 周报 #141
人工智能·swiftui·swift
sweet丶12 天前
Swift 元编程-Macro
swift
影寂ldy15 天前
WinForm PictureBox控件 + ImageList组件 完整笔记
开发语言·笔记·swift
Deepzz16 天前
macOS 上调教第三方鼠标的一些经验:从滚动顺滑到输入法自动切换
macos·swift·鼠标
东坡肘子16 天前
WWDC 26:AI 帮你看完了,然后呢?-- 肘子的 Swift 周报 #140
人工智能·swiftui·swift
大熊猫侯佩17 天前
SwiftData 迁移深度指南:从入门到“填坑”(下集)
数据库·swift·编程语言
大熊猫侯佩17 天前
SwiftData 迁移深度指南:从入门到“填坑”(上集)
数据库·swift·编程语言
多彩电脑17 天前
SwiftUI的导航界面的嵌套问题
开发语言·swift·设计语言
wjm04100617 天前
ios内存管理
ios·objective-c·swift·客户端开发