inout声明类型装饰

时间:2016-07-20 10:46:31

标签: swift swift3

根据Swift 3中Array(stringArray.joinWithSeparator("").characters.utf8) 的用法,我有一个问题。

据我所知,inout使用起来非常昂贵。

有问题何时以及为何使用inout声明更好?

常规功能:

inout

func double(input: Int) { var input = input input = input * 2 } 声明使用:

inout

1 个答案:

答案 0 :(得分:1)

小心,这是一个经典的陷阱! :)

你的两个功能并没有做同样的事情,所以一个不比另一个“更好”。

你的第一个:

func double(input: Int)  {
    var input = input
    input = input * 2
}

什么都不做。

因为使用var input = input您正在创建输入值的副本,所以当您执行input = input * 2时,您只是修改本地副本,因为您没有返回它,它被丢弃,这个功能最终没有效果。

你的第二个:

func double(input: inout Int) {
    input = input * 2
}

执行某些操作:它会修改原始值,因为inout是一种通过引用传递值的方法。无需复制并返回它:变量本身,即传递给函数的变量,将被更改。

注意:我建议您阅读Martin R的优秀链接,其中inout得到了很好的解释:https://stackoverflow.com/a/34486250/1187415