Swift中让值类型以引用方式传递

发布时间 2023-04-05 13:51:37作者: R1cardo

Swift中让值类型以引用方式传递

在 Swift 众多数据类型中,只有 class 是引用类型,
其余的如 Int、Float、Bool、Character、Array、Set、enum、struct全都是值类型.

有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),
这时,Swift 提供的 inout 关键字就可以实现。
举例:

var value = 50
print(value)  // 此时value值为50

func increment(_ value: inout Int, _ length: Int = 10) {
    value += length
}

increment(&value)
print(value)  // 此时 value 值为60,成功改变了函数外部变量 value 的值

即:声明函数时,在参数类型前面用 inout 修饰,函数内部实现改变外部参数
传入参数时(调用函数时),在变量名字前面用 & 符号修饰表示,表明这个变量在参数内部是可以被改变的(可将改变传递到原始数据)

注意

  • inout 修饰的参数是不能有默认值的(例子中 length = 10被赋予默认值)
  • 一个参数一旦被 inout 修饰,就不能再被 var 和 let 修饰了。