[英]Multidimensional array of objects bug in swift?
我有一個由項目(對象)組成的多維(2D)數組,我決定使用“自然”方式創建它(因此,我沒有使用技巧將1D數組轉換為2D,而是直接使用2D)。
一個項目在矩陣上的X和Y位置,並且該項目也具有隨機類型。
除了所有項目的Y位置之外,其他所有事情似乎都可以工作...由於Swift處理2D的方式,我需要初始化2D數組,然后正確影響每個項目的值。
我確實驗證了我對這些項目產生的價值,它們可以正常工作。 然后,當我正確設置項目后驗證該項目時,Y位置對於所有項目來說都是唯一的。
class Matrix {
var nbCol: Int
var nbRow: Int
var items: [[Item]]
init(nbCol: Int, nbRow: Int) {
self.nbCol = nbCol
self.nbRow = nbRow
items = Array<Array<Item>>()
//Initialize
for col in 0..<Int(nbCol) {
items.append(Array(count: nbRow, repeatedValue: Item()))
}
//Affect the correct values to each item
createItems()
}
func createItems() {
//Assign X, Y & type values to the item
for x in 0..<Int(nbCol) {
for y in 0..<Int(nbRow) {
items[x][y].setItem(x, y: y, type: ItemType.random())
println("Create for (\(x), \(y)): (\(items[x][y].x), \(items[x][y].y))")
}
}
//Verify the values
for x in 0..<Int(nbCol) {
for y in 0..<Int(nbRow) {
println("Check for (\(x), \(y)): (\(items[x][y].x), \(items[x][y].y))")
}
}
}
}
項目(部分)是:
class Item: Printable {
var x: Int
var y: Int
var type: ItemType //Enum
func setItem(x: Int, y: Int, type: ItemType) {
self.x = x
self.y = y
self.type = type
}
}
和輸出(問題以紅色顯示):
如您所見,在“設置值”期間,X和Y是正確的。 但是在檢查時,只有X是正確的,而Y是“卡住”的。 難道我做錯了什么 ?
編輯 :順便說一句,所有項目也具有相同的類型。 對於所有項目,只有X是正確的,Y和類型是“固定的”。
您的問題是repeatedValue:Item()
僅計算一次,而不計算count
次數。 這意味着給定列的每一行中都具有相同的Item,因此在設置值時,您將覆蓋前一個值-這就是為什么在打印時獲得最后一個值(2)的原因。
您需要使用循環來填充行,而不是使用count / repeatedValue構造。
init(nbCol: Int, nbRow: Int) {
self.nbCol = nbCol
self.nbRow = nbRow
items = Array<Array>()
//Initialize
for col in 0..<Int(nbCol) {
var colArray=Array<Item>()
for row in 0..<Int(nbRow) {
colArray.append(Item())
}
items.append(colArray)
}
//Affect the correct values to each item
createItems()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.