迅捷:被信号4终止

时间:2018-09-24 01:53:45

标签: swift terminate

我正在尝试编写一个将arrayOne,arrayTwo和arrayThree作为输入的函数。如果arrayTwo的最后一个元素具有任何0,则该函数应该从数组中删除这些元素,以及从arrayOne中删除相同的元素。当我运行代码并尝试对其进行测试时,出现错误:“被信号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)
    }
        } 

2 个答案:

答案 0 :(得分:1)

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

也:

while arrayTwoNew[counter] == 0

可能是要删除var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1) 中的最后一项,但这更容易实现:

arrayTwoNew

尤其是因为您没有使用arrayTwoNew.removeLast()

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

elementToBeRemoved

答案 1 :(得分:0)

您正在创建一个新数组“ arrayTwoNew”,它将与原始数组

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

现在,我还在为您的.remove苦苦挣扎-这将返回一个元素,因此将无法使用。我通常会在这里使用过滤器,但不确定您在做什么!

//带删除的代码(用过滤器替换?)可以帮助您入门:

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)
    }
}