Swift 关键字 inout (让值类型以引用方式传递)

两种参数传递方式

  • 值类型
    传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据。

  • 引用类型
    把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据。

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

让值类型以引用方式传递

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

// inout 怎么使用
var value = 50
print(value)  // 此时value值为50
func increment(value: inout Int, length: Int) {
    value += length
}
increment(value: &value,length: 10)
print(value)  // 此时value值为60,成功改变了函数外部变量value的值

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

注意
1.inout 修饰的参数是不能有默认值的(例子中 length = 10被赋予默认值),有范围的参数集合也不能被修饰;
2.一个参数一旦被 inout 修饰,就不能再被 var 和 let 修饰了。

泛型 (inout) 定义一个泛型函数,把2个参数的值进行交换

func swap<T>(a: inout T, b: inout T) {
    (b, a) = (a, b)
}
var test1 = "qwer"
var test2 = "asdf"
swap(&test1, &test2)
print(test1) // asdf
print(test2) // qwer
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容