Swift 2 - 在设置过程中是否复制了数组?

时间:2015-11-17 17:20:39

标签: ios arrays swift

我有这样的课程设置。在我的方法中,我想使用特定的数组,具体取决于传递的参数。我的问题是:“数组”变量是所选数组的副本还是对它的引用?如果是副本,如何传递对数组的引用?我不想复制它,因为它很长。

我听说在Swift 1时,只在需要时才复制数组(编译器决定何时)。 Swift 2现在的情况如何?

class ... {
private var currentVertexes = [CCVertex]()
private var mainVertexes : [CCVertex]!
private var leftVertexes : [CCVertex]!
private var rightVertexes : [CCVertex]!
private var topVertexes : [CCVertex]!
private var bottomVertexes : [CCVertex]!

...
internal func method(var factor: Float) {

    let array = factor < 0.0 ? leftVertexes : rightVertexes
...
}

2 个答案:

答案 0 :(得分:2)

取决于CCVertex是结构还是类。如果它是一个结构,它将被复制,而不是它是一个类。

来自Apple's documentation(也有很好的例子):

  

复制数组还会复制该数组中值类型的所有元素。这意味着更改数组的其中一个元素不会更改数组

的任何副本的元素      

如果数组中的元素是类的实例,则更改类确实会影响其他副本,因为类具有引用语义

答案 1 :(得分:1)

数组是值类型,但是当您仅以只读方式访问它们时,使用copy-on-write来防止不必要的副本(请参阅SwiftDocs

因此,如果您的方法的其余部分仅从数组中读取,那么您不必担心副本(无论CVVertex是结构还是类)。