[swift 进阶]读书笔记-第六章:函数 C6P4 inout参数和可变方法

353 阅读2分钟

第六章:函数(function)

6.4 inout参数和可变方法(inout parameter and mutating function)

知识点: inout 关键字:就是改变传递给函数的参数,让参数变得可变(swift 中方法的参数默认都是 let 不可变的)

inout做的事情就是把一个值传递给函数,函数可以改变这个值,然后将原来的值替换,并传递出来。 并不是传递引用

什么样的表达式可以当作inout参数去传递?

先来弄懂两个c++中的概率。 lvalve (变量)和 rvalve (不是变量) 如array[2] = 4 lvalue = rvalue

  • lvalue估计来源于left value。 位置处于左边。就是可以修改的值。
  • rvalue估计来源于right value。处于赋值语句右边,是只读的不可修改的值。 资料来源:关于lvalve 和 rvalve 感兴趣的同学可以看看。 inout参数,只能传递lvalve给它。因为不可能对一个rvalve进行改变。
注: 每个lvalve前面需要加上&符号将它传入(swift中的自动补全会帮我们加上& 😄)

[图片上传失败...(image-6ded17-1547615689035)]

inout的基本使用

知识点:只读属性(只有get方法)无法作用于inout参数

tips:swift文档指出 我们不应该依赖inout这个行为

嵌套函数和inout


可以在嵌套函数中使用一个inout参数

[图片上传失败...(image-949a35-1547615689035)]

注: 我们不能让这里的inout参数逃逸@escaping (原因:inout的值会在函数返回之前赋值回去,逃逸会增加inout参数的生命周期,如果延时返回回去赋值,原来的值不存在了,就妥妥的不安全啊~)

@escaping 的用法后面会讲。 你急的话可以先自己百度。默认大家都很优秀,知道是什么用法~

&不意味inout的情况


&除了讲变量传递给inout, 还可以将变量转化为不安全的指针

[图片上传失败...(image-6cae5-1547615689035)]

这里的&使用就不是inout语义了,是将可怜的变量转化成了不安全的指针。

文章源文件地址