Swift:由信号 4 终止

Swift: Terminated by Signal 4

我正在尝试编写一个将 arrayOne、arrayTwo 和 arrayThree 作为输入的函数。如果 arrayTwo 有任何 0 作为它的最后一个元素,该函数应该从数组中删除这些元素,以及从 arrayOne 中删除相同的元素。当我 运行 代码并尝试对其进行测试时,出现错误:"Terminated by signal 4"。

可能是什么问题?

var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree

 var endElement = arrayTwoNew.last
 if endElement == 0 {
    var counter = arrayTwoNew.count
    while arrayTwoNew[counter] == 0 {
        var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1) 
        var 2ndElementToBeRemoved = arrayOneNew.remove(at: counter - 1)
    }
        } 

您正在创建一个新数组 "arrayTwoNew",它与位于

的原始数组混合在一起
var arrayTwoNew = arrayTwoNew.remove(at: counter - 1) 

现在我也在为你的 .remove 苦苦挣扎 - 这个 returns 元素将无法工作。我通常会在这里使用过滤器,但我不确定你在做什么!

//删除删除的代码(用过滤器替换?)让你开始:

let arrayOne = [1,2,3]
let arrayTwo = [2,3,4]
let arrayThree = [5,6,7]

var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endIndex = arrayTwoNew.last
if endIndex == 0 {
    let counter = arrayTwoNew.count
    // arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
    while arrayTwoNew[counter] == 0 {
        // arrayOneNew = arrayOneNew.remove(at: counter - 1)
    }
}

您的主要问题是您将 counter 设置为 arrayTwoNew.count,它比 arrayTwoNew 中的最后一个有效索引大 1,因此 while arrayTwoNew[counter] == 0索引超出范围时崩溃。

还有:

var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)

可能是为了从 arrayTwoNew 中删除最后一项,但这更容易完成:

arrayTwoNew.removeLast()

特别是因为您没有使用 elementToBeRemoved

我认为你正在尝试这样做:

while arrayTwoNew.last == 0 {
    arrayTwoNew.removeLast()
    arrayOneNew.removeLast()
    arrayThreeNew.removeLast()
}