我正在做这样的事情:
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时,它不应该改为通过引用传递吗?
这是因为类实例和函数是引用类型.Ints,结构和其他一切都是值类型.将引用类型作为参数传递给函数时,您已经将引用该实例.当你传递一个值类型作为参数,函数获取变量(默认情况下)的副本,所以inout是平时(见编辑)时才需要,如果你想改变一个值从函数的内部类型.
不使用&或更改类实例inout:
更多细节
在创建引用类型时var t = myClass(),您实际上是在创建一个变量t,该变量是指向myClass内存中实例的指针.通过&t在引用类型前面使用&符号,您实际上是在说" 给我指向myClass实例指针的指针 "
有关参考和值类型的更多信息:https://stackoverflow.com/a/27366050/580487
编辑
正如评论中指出的那样,inout如果你想改变指针等,你仍然可以使用引用类型,但我试图阐明一般用例.
下面是一个对函数内部数组进行排序的示例: