我有一个关于 Swift 3 中 inout
用法的问题。
据我所知,inout
的使用成本非常高。
问题是什么时候以及为什么使用 inout
声明更好?
常规函数:
func double(input: Int) {
var input = input
input = input * 2
}
inout
声明使用:
func double(input: inout Int) {
input = input * 2
}
最佳答案
小心,这是一个经典的陷阱! :)
您的两个功能没有做同样的事情,所以一个并不比另一个“更好”。
你的第一个:
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 .
关于swift - 类型修饰的 inout 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38479134/