2015-12-08 210 views
0

我使用下面的方法來創建一個二維陣列,其中每個元素是一個類元素2D陣列,其中每個元素是一個類元素

var Width: int = 10 
var Heigth: int = 10 

class ABC { 
    var A: Int = 0 
    var B: Int = 0 
    var C: Int = 0 
} 

var MABC = [[ABC]] (count: Width, repeatedValue: [ABC](count:Heigth, repeatedValue: ABC())) 

和下面的表達式更改的元素中的一個的值。

MABC[0][0].A = 1 

但是當我做到這一點,所有matriz元素的屬性A從0變爲1時,不僅在元件[0] [0]。

怎麼了?

感謝

+0

這無可厚非。你用相同的參考值填充你的數組,所以數組中的所有項表示相同的類... – user3441734

回答

0
var Width: Int = 10 
var Heigth: Int = 10 

class ABC { 
    var A: Int = 0 
    var B: Int = 0 
    var C: Int = 0 
} 

var MABC = [[ABC]] (count: Width, repeatedValue: [ABC](count:Heigth, repeatedValue: ABC())) 
MABC.forEach { (arr) ->() in 
    dump(UnsafePointer<ABC>(arr)) 
} 
/* 
▿ UnsafePointer(0x7FF4C0C36C20) 
- pointerValue: 140689182780448 
▿ UnsafePointer(0x7FF4C0C36C20) 
- pointerValue: 140689182780448 
▿ UnsafePointer(0x7FF4C0C36C20) 
- pointerValue: 140689182780448 
..... 
*/ 

檢查每個元素的地址,你陣列英寸你沒有通過相同的參考陣列中的每個元素...

使用價值類型來填補你的陣列

var Width: Int = 10 
var Heigth: Int = 10 

struct ABC { 
    var A: Int = 0 
    var B: Int = 0 
    var C: Int = 0 
} 

var MABC = [[ABC]] (count: Width, repeatedValue: [ABC](count:Heigth, repeatedValue: ABC())) 
MABC[0][0].A = 1 
dump(MABC) 

....▿ 10 elements 
    ▿ [0]: 10 elements 
    ▿ [0]: ABC 
     - A: 1 
     - B: 0 
     - C: 0 
    ▿ [1]: ABC 
     - A: 0 
     - B: 0 
     - C: 0 
    ▿ [2]: ABC 
     - A: 0 
     - B: 0 
     - C: 0 
....... 
+0

我很抱歉,但我不知道如何解決這個問題。我有一個10×10元素的數組MABC,每個元素都是ABC類型的元素。 – moranchoj

+0

使用struct作爲MABC將幫助您在數組的每個元素中使用它的額外副本。或者您可以先創建一個空數組,然後在一個循環中添加MABC類的新實例。 – user3441734

+0

謝謝我會嘗試 – moranchoj

相關問題