Свифт: прекращается сигналом 4 - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь написать функцию, которая имеет 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 голосов
/ 24 сентября 2018

Ваша основная проблема в том, что вы устанавливаете counter в arrayTwoNew.count, что на 1 больше, чем последний действительный индекс в arrayTwoNew, поэтому 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()
}
0 голосов
/ 24 сентября 2018

Вы создаете новый массив "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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...