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 写时复制,安全又高效
相关推荐
Sheffi6614 小时前
Swift 所有权宏 `~Copyable` 深度解析:如何在 Swift 中实现类似 Rust 的内存安全模型?
rust·ssh·swift
文件夹__iOS1 天前
Swift 性能优化:Copy-on-Write(COW) 与懒加载核心技巧
开发语言·ios·swift
符哥20081 天前
使用Apollo和GraphQL搭建一套网络框架
ios·swift·rxswift
2601_949146531 天前
Swift语音通知接口集成手册:iOS/macOS开发者如何调用语音API
macos·ios·swift
-晨-风-1 天前
Flutter ‘Flutter/Flutter.h‘ file not found (Swift:No such module ‘Flutter‘)
开发语言·flutter·swift
sweet丶2 天前
Swift 并发编程深度解析:从 async/await 到智能调度
swift
理智.6293 天前
一次 vLLM / Swift 多模态服务端口“消失”的完整排查记录
开发语言·swift·vllm
wumu_Love3 天前
Swift Concurrency (async/await) 的使用和概念,并且详情阐述actor 的意义和作用
开发语言·ios·swift
东坡肘子3 天前
Xcode 迈入 Agent 时代 -- 肘子的 Swift 周报 #122
人工智能·swiftui·swift