知识卡片

闭包是引用类型

专业/工作 · 714.a

内容

函数和闭包都是引用类型,这一点和 [[字符串是值类型而非引用类型]] 描述的字符串/结构体/枚举正好相反:把一个闭包赋给常量或变量,赋的其实是”指向这个闭包的引用”,而非闭包本身的独立拷贝。这意味着把同一个闭包赋给两个不同的变量,两者其实指向同一份底层状态——通过其中一个变量调用闭包改动了内部捕获的值,另一个变量再调用时看到的也是改动后的结果。判断一个 Swift 类型是值语义还是引用语义,不能只看它能不能被赋值调用,要看赋值这个动作复制的是数据本身还是数据的地址。

参考来源

《Swift全解析:新式iOS实战开发》第8章《Swift闭包》