9 ответов:
принимая как должное, что ответ @vadian - решение, Я бы просто хотел отметить, что ваш код не работает.
прежде всего, индексы массива основаны на 0, поэтому вы должны переписать диапазон соответственно:
for index 0..<myArray.count { myArray.removeAtIndex(index) }однако эта реализация вызовет сбой. Если у вас есть массив из 10 элементов, последний элемент занимает позицию в индексе 9.
используя этот цикл, на первой итерации элемент с индексом 0 удаляется, и это приводит к тому, что последний элемент сдвигается вниз по индексу 8.
на следующей итерации элемент с индексом 1 удаляется, а последний элемент сдвигается вниз с индексом 7. И так далее.
в какой-то момент цикла попытка удалить элемент для несуществующего индекса приведет к сбою приложения.
при удалении элементов из массива в цикле, лучший способ сделать это, пересекая его в обратном порядке:
for index in reverse(0..<myArray.count) { myArray.removeAtIndex(index) }что гарантирует, что удаленные элементы не изменят порядок или индекс элементов, которые еще предстоит обработать.
ты упускаешь
inключевое слово, которое вызывает вашу ошибку. Код должен быть:for index in 1...myArray.count { myArray.removeAtIndex(index) }это, однако, не будет работать, как вы ожидали бы по нескольким причинам:
- последний допустимый индекс является
count - 1что потребует1..<myArray.count- что еще более важно удаление элемента из массива сокращает его, тем самым изменяя индексы каждый раз.
если вы пытаетесь удалить все вещи из массив тогда вы должны сделать, как другие предложили и использовать:
myArray.removeAll()в случае, если вы хотите только первый элемент и ничего больше, вы можете получить ссылку на первый объект, очистить массив, а затем добавить объект обратно:
var firstElement = myArray.first! myArray.removeAll() myArray.append(firstElement)
Если вы действительно хотите очистить массив, самый простой способ, чтобы повторно инициализировать его.
Кайл находится на правильном пути, но его код потерпит неудачу, поскольку возможные индексы уменьшаются во время перечисления, что приводит к незаконным индексам.
один из способов решить это-перечислить назад. В Swift это делается с помощью успехов.
for index in stride(from: myArray.count - 1, through: 0, by: -1) { myArray.removeAtIndex(index) }другие варианты были бы использовать
filter()Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in return false })Swift 2
myArray = myArray.filter{ (obj) -> Bool in return false }
ваш код должен работать, он просто не связан.
Swift 3
existingArray = []делая это, вы повторно назначаете пустой массив существующему массиву и ссылаетесь на тип данных.
кроме того, вы можете использовать
removeAll, который удаляет все элементы из массива и даст возможность сохранить существующий потенциал.existingArray.removeAll()это
mutatingфункция, которая означает, что массив, вызывающий метод будет изменен (пустой.)
здесь removeAllObjects() метод доступен в Swift 2
Syntax : public func removeAllObjects() Eg.: mainArray.removeAllObjectsдля удаления элемента при определенном индексе используйте:
Syntax : public func removeObjectAtIndex(index: Int) Eg.: mainArray.removeObjectAtIndex(5)для удаления последнего элемента :
Syntax : public func removeLastObject() Eg.: mainArray.removeLastObject()для удаления элементов в определенном диапазоне используйте:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)для удаления конкретного элемента используйте:
Syntax : public func removeObject(anObject: AnyObject)ниже скриншот показывает список методов, доступных в NSMutableArray расширение
Vadian имеет правильный ответ с точки зрения того, что вы пытаетесь достичь. Проблема, показанная в результате вашего примера кода, связана с тем, как вы пытаетесь создать
forпетли.Indexпо умолчанию будет начинаться с 0. Добавление в диапазон чисел после этого не является правильным способом создания цикла for. Вот почему вы видите ошибку. Вместо этого создайте цикл for следующим образом:for index in myArray.count { // Do stuff }надеюсь, этот ответ поможет другим, которые являются новыми для SWIFT или программирование.

Comments