2D数组,其中每个元素都是一个类元素

时间:2015-12-08 20:55:17

标签: arrays swift class

我使用以下方法创建一个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]中。

怎么了?

由于

1 个答案:

答案 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
.......