为什么不通过引用传递?

4th*_*ace 1 swift

我正在做这样的事情:

someFunction(&myClass)
Run Code Online (Sandbox Code Playgroud)

someFunction在myClass上对数组进行排序.

someFunction(inout someclass:ClassA) {
 someClass.sort({$0.price > $1.price})  
}
Run Code Online (Sandbox Code Playgroud)

如果我在函数调用后打印myClass,我注意到数组仍未排序.据我所知,Swift通过复制传递值.但是当我使用inout时,它不应该改为通过引用传递吗?

tom*_*nas 5

这是因为类实例和函数是引用类型.Ints,结构和其他一切都是值类型.将引用类型作为参数传递给函数时,您已经将引用该实例.当你传递一个值类型作为参数,函数获取变量(默认情况下)的副本,所以inout平时(见编辑)时才需要,如果你想改变一个从函数的内部类型.

不使用&或更改类实例inout:

在此输入图像描述

更多细节

在创建引用类型时var t = myClass(),您实际上是在创建一个变量t,该变量是指向myClass内存中实例的指针.通过&t在引用类型前面使用&符号,您实际上是在说" 给我指向myClass实例指针的指针 "

有关参考和值类型的更多信息:https://stackoverflow.com/a/27366050/580487

编辑

正如评论中指出的那样,inout如果你想改变指针等,你仍然可以使用引用类型,但我试图阐明一般用例.

下面是一个对函数内部数组进行排序的示例:

在此输入图像描述

  • 请将代码示例作为文本而不是图像.更好的复制代码供任何人尝试. (2认同)