爲什麼不能正常工作?使用類作爲鍵的字典數組索引超出範圍 - swift
我試圖將字典的值賦給false的錯誤是它失敗的地方。它返回此錯誤「致命錯誤:數組索引超出範圍」,如底部輸出中所示。
var tupleCount = 0
for var i = 0; i < width; ++i {
for var j = 0; j < height; ++j {
arrayOfTupleClass.append(TupleClass(newX: i, newY: j, newXMax: width, newYMax: height))
print("arrayOfTupleClass.count: \(arrayOfTupleClass.count)")
print("arrayOfTupleClass[tupleCount]: \(arrayOfTupleClass[tupleCount])")
print("tupleCount: \(tupleCount)")
print("imageNum: \(imageNum)")
// placing '0' in place of dictionary Array index for simplicity
pointDictionaryArray[0][arrayOfTupleClass[tupleCount]] = false // <-- error here
tupleCount++
}
}
這是怎麼我的字典陣列設置:
var arrayOfTupleClass = [TupleClass]()
var pointDictionaryArray = [[TupleClass: Bool]]()
這是我的TupleClass其中應包括對具有類作爲字典的關鍵,因爲我做了哈希的。
class TupleClass: Hashable {
var x: Int!
var y: Int!
let yMax: Int!
let xMax: Int!
var weight: Int = 0
init(newX: Int, newY: Int, newXMax: Int, newYMax: Int) {
x = newX
y = newY
yMax = newYMax
xMax = newXMax
}
func setWeight(newWeight: Int) {
weight = newWeight
}
func getWeight() -> Int {
return weight
}
// required for the Hashable protocol
var hashValue: Int {
return x * yMax + y
}
};
// required function for the Equatable protocol, which Hashable inheirits from
func ==(left: TupleClass, right: TupleClass) -> Bool {
return (left.x == right.x) && (left.y == right.y)
}
這是輸出:
arrayOfTupleClass.count: 1
arrayOfTupleClass[tupleCount]: My_Project_Name.TupleClass
tupleCount: 0
imageNum: 0
fatal error: Array index out of range
我在錯誤行上用'0'替換的變量是'imageNum'btw,這不是問題,但我覺得有人會去把它提起來,所以我現在提起它 – brw59
你可以嘗試.. pointDictionaryArray [0] [arrayOfTupleClass [tupleCount] -1] = false。數組數總是比數組最後一個元素的索引高1。例如,一個由10個元素構成的數組索引爲0-9,所以試圖引用元素「10」會引發錯誤。我打算將此作爲答案發布,但我不像其他人那樣熟悉這種語言。 – LuvnJesus
@LuvnJesus「arrayOfTupleClass [tupleCount]」返回一個類實例,所以我不能從中減去一個數字。我試了它,並確認它不起作用 – brw59