根据Swift 3中Array(stringArray.joinWithSeparator("").characters.utf8)
的用法,我有一个问题。
据我所知,inout
使用起来非常昂贵。
有问题何时以及为何使用inout
声明更好?
常规功能:
inout
func double(input: Int) {
var input = input
input = input * 2
}
声明使用:
inout
答案 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 。