知识卡片

inout 参数打破值语义的默认隔离

专业/工作 · 713.a

内容

函数参数默认是不可变的常量,即使声明成变量参数也只能修改函数内部的临时副本,调用结束后外部变量毫发无损——这是 [[字符串是值类型而非引用类型]] 那种”值传递即拷贝、互不影响”的默认隔离在函数参数上的体现。但有时确实需要让函数改到调用者那份原始数据(如交换两个变量的值),这时要在参数类型前显式加 inout,调用处也要在实参前加 & 符号——两处标记缺一不可。这种”默认隔离、显式开口子”的设计,让”这个函数会不会悄悄改我的变量”这件事从只能看函数体实现来判断,变成了一眼扫过函数签名就能确定的信息。

参考来源

《Swift全解析:新式iOS实战开发》第7章《Swift函数》