我正在做这样的事情:
someFunction(&myClass)
其中someFunction对myClass上的数组进行排序。
someFunction(inout someclass:ClassA) {
someClass.sort({$0.price > $1.price})
}
如果我在函数调用后打印myClass,我注意到数组仍未排序。据我所知,Swift通过复制传递值。但是当我使用inout时,它不应该改为通过引用传递吗?
答案 0 :(得分:5)
这是因为类实例和函数是引用类型。 Ints,结构和其他一切都是值类型。将引用类型作为参数传递给函数时,您已经将引用该实例。当您将值类型作为参数传递时,该函数会获取该变量的副本(默认情况下),因此inout
通常(请参阅编辑)只有在您想要更改时才需要值从函数内部输入。
在没有&
或inout
的情况下更改类实例:
更多详情
当您创建引用类型var t = myClass()
时,您实际上正在创建一个变量t
,它是指向内存中myClass
实例的指针。通过在引用类型前面使用&符号&t
,您实际上是在说“给我指向myClass
实例的指针”
有关参考与价值类型的更多信息:https://stackoverflow.com/a/27366050/580487
修改强>
正如评论中指出的那样,如果你想改变一个指针等,你仍然可以使用inout
和引用类型,但我试图揭示一般用例。
下面是对函数内部数组进行排序的示例:
答案 1 :(得分:0)
如果您在此处发布代码,则会更有意义。顺便说一下,看看下面可能对你有帮助的链接,