我有这样的课程设置。在我的方法中,我想使用特定的数组,具体取决于传递的参数。我的问题是:“数组”变量是所选数组的副本还是对它的引用?如果是副本,如何传递对数组的引用?我不想复制它,因为它很长。
我听说在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
...
}
答案 0 :(得分:2)
取决于CCVertex
是结构还是类。如果它是一个结构,它将被复制,而不是它是一个类。
来自Apple's documentation(也有很好的例子):
复制数组还会复制该数组中值类型的所有元素。这意味着更改数组的其中一个元素不会更改数组
的任何副本的元素如果数组中的元素是类的实例,则更改类确实会影响其他副本,因为类具有引用语义
答案 1 :(得分:1)
数组是值类型,但是当您仅以只读方式访问它们时,使用copy-on-write来防止不必要的副本(请参阅SwiftDocs)
因此,如果您的方法的其余部分仅从数组中读取,那么您不必担心副本(无论CVVertex
是结构还是类)。