我使用以下方法创建一个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 :(得分: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
.......