【问题标题】:Swift: Terminated by Signal 4斯威夫特:由信号 4 终止
【发布时间】:2019-02-27 12:32:46
【问题描述】:

我正在尝试编写一个以 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)
    }
        } 

【问题讨论】:

  • arrayTwoNew.last 不是最后一个索引。这是最后一个元素。尝试打印出 endIndex 和计数器进行调试,您将能够看到发生了什么
  • ok 例如: var arrayOne = [1,2,3,4,5,6,7] var arrayTwo = [140,142,142,0,0,0,0] var arrayThree = [2000, 2000,2000,2000,2000,2000,2000] 我希望输出为 arrayOne = [1,2,3] var arrayTwo = [140,142,142] var arrayThree = [2000,2000,2000,]

标签: swift terminate


【解决方案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()
}

【讨论】:

  • 谢谢,这正是我要找的
【解决方案2】:

您正在创建一个新数组“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)
    }
}

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 2019-08-02
    • 2016-02-08
    • 2017-11-13
    相关资源
    最近更新 更多