2015-11-17 20 views
0

我有這樣的課程設置。在我的方法中,我想根據傳遞的參數使用特定的數組。我的問題是:是「數組」變量選定數組的副本還是對它的引用?如果它是一個副本,那麼如何傳遞對數組的引用?我不想複製它,因爲它很長。Swift 2 - 陣列在設置過程中是否被複制?

我聽說在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 
... 
} 
+1

可能重複的[Swift:通過引用傳遞數組?](http://stackoverflow.com/questions/24250938/swift-pass-array-by-reference) – Farnabaz

回答

1

數組是值類型,但在使用寫入時複製,以防止不必要的副本,當你只是在一個只讀的方式訪問它們(見SwiftDocs

所以,如果你的方法的其餘部分只從數組中讀取,那麼您不必擔心副本(不管CVVertex是否是str uct或一類)。

+0

是值得信賴的源? –

+0

這不是一個官方的Apple源,但它是一個非常知名的開源社區項目,包括從Swift自己生成的內容 – Clafou

+0

好吧,我會標記你的文章作爲答案只是因爲我真的希望事情是這樣的 –

2

取決於CCVertex是結構還是類。如果它是一個結構,它將被複制,而不是如果它是一個類。

Apple's documentation(並有很好的實例太):

複製的陣列也複製所有那些值類型的數組的元素的。這意味着更改數組中的某個元素不會更改數組中任何副本的元素

如果數組中的元素是類的實例,更改該類確實會影響其他副本,因爲類具有引用語義