配列からオブジェクトを削除すると、範囲外のインデックスのエラーが発生します。私のコードがあります。 Floorクラスのオブジェクトをとり、この階のPassengerクラスのオブジェクトの配列で動作するElevator関数です。現在の階のオブジェクトの一時的なコピーを作成し、このコピーの配列に沿って進み、オブジェクトが条件に適している場合、このオブジェクトを乗客のエレベータ配列にプッシュし、現在のフロアオブジェクトの元の配列からインデックスで削除します。これが重要な場合は、Equatableプロトコルを使用して比較する関数を作成します。 お返事ありがとうございます。インデックスの範囲外のエラー、カスタムオブジェクトの配列。 Swift
class Passenger: Equatable{...}
func ==(l: Passenger, r: Passenger) -> Bool {
return l === r
}
func checkFloor(f: Floor){
var tempFloor = f
var pass = passengers
for i in 0..<passengers.count {
if(passengers.isEmpty){
break
}
if(pass[i].getFloor()==f.getIdFloor()){
f.peoples.append(pass[i])
f.peoples[f.peoples.count - 1].setDirection(who: "nothing")
//if var index = passengers.index(of: pass[i]) {
if let index = searchInArray(who: passengers, who: pass[i]) {
passengers.remove(at: index)
}
}
}
// in this part I have a problem
for i in 0..<tempFloor.countOf() {
if(f.peoples.isEmpty || passengers.count >= capacity){
break
}
if(tempFloor.peoples[i].getDirection()==tempFloor.peoplesDirection()
){
passengers.append(tempFloor.peoples[i])
if let index = f.peoples.index(of: tempFloor.peoples[i]) {
if (index >= 0 && index < f.peoples.count) {
//print(index)
f.peoples.remove(at: index) // index out of range error
}
}
}
}
}
tempFloor.countOf()は、tempFloor.peoples.countを書き込むと同じです –